프로세스와 쓰레드의 차이

hodu·2022년 10월 13일
0

python

목록 보기
15/17
post-thumbnail

지난 게시글에서 Concurrency(동시성/병행성)와 Parallelism(병렬성)을 정리해보았다.

그러면 이어서 프로세스와 쓰레드의 차이점에 대해 정리해보자.

1. 프로세스란?

프로세스를 말하기 전, 우리는 '프로그램'이라는 단어의 정의를 파악해야 한다.

📍 프로그램은 뭘까?

쉽게 말해 '코드 덩어리'이다. 파일이 보조기억장치(HDD,SSD)에 저장되어 있긴 하지만, 아직 주기억장치(메모리)에 적재되지 않은 상태이다.

이 메모리와 관련된 개념은 매우 중요해서 꼭 알아두면 좋다.

  • 적재정책 : 프로세스를 메모리로 반입할 '시기'를 결정하는 정책 (요구적재 : 사용자가 요구함, 예상적재 : 미리 예측해서 넣음)
  • 배치정책 : 프로세스를 메모리 '어디'에 저장할지 결정하는 정책(최초, 최적, 최악)
  • 대치정책 : 메모리가 충분하지 않을 때 제거할 프로세스를 찾는 정책(FIFO, LRU)

다시 돌아와서 그럼 프로세스는 무엇일까?

👉 프로그램이 메모리에 적재된 상태이다. 이것을 '동적'인 상태라고도 부르며 간단히 말해 실행되고 있는 컴퓨터 프로그램이라고 생각하면 된다.

이 프로세스의 구조에는 크게 4가지가 있다.

(사진출처 : https://becomeweasel.me/process-and-thread/)

code, data, heap stack으로 구성되어 있는데

  • code : 프로그램의 코드
  • data : 전역변수
  • heap : 동적으로 생긴 데이터(new Object(), malloc())
  • stack : 호출된 함수, 지역변수 등 임시데이터

이렇게 나뉘게 된다.

2. 쓰레드란?

프로세스 내 실제로 작업을 수행하는 주체를 의미한다.

📍그럼 왜 쓰레드가 나왔을까?
과거에는 프로그램 실행 시작부터 끝까지 한 프로세스만을 사용하여 실행되었으나 이제는 프로세스 하나가 단순이 한 작업만을 하는 경우가 없음.

이 문제에 대해 "프로세스를 여러개 만들어서 사용하면 되지 않을까?"라는 답이 나왔지만, 한가지 문제가 생겼다.

프로세스는 안정성을 위해 자신에게 할당된 메모리 내의 정보에만 접근할 수 있다.

그래서 다른 메모리도 접근할 수 있는 "쓰레드"라는 개념이 나오게 되었다.
모든 프로세스에는 최소한 하나 이상의 쓰레드가 존재한다. 이 것을 "멀티쓰레드"라고 한다.

멀티쓰레드는 하나의 프로세스 내에서 여러개의 쓰레드가 동시에 작업함을 의미한다.
하지만 실제로는 한 개의 CPU에서 한 개의 작업(프로세스)만 수행할 수 있기 때문에 짧은 시간동안 여러 작업을 번갈아 가며 수행하게 된다.(동시성)

쓰레드의 장단점

앞에서 말했다시피
쓰레드는 메모리를 공유하며 동작할 수 있다.
프로세스의 구조 내 stack 부분만 독립적으로 가지고 있고 나머지 부분은 공유한다.

📌 메모리를 공유하게 되면 아래와 같은 이점이 생긴다.
1. cpu 사용률을 향상시킨다.
2. 자원을 효율적으로 사용할 수 있다.
3. 사용자 응답성이 증가한다.
4. 작업이 분리되어 코드가 간결해진다.

📌 단점은
1. 동기화 문제
2. 교착상태
3. 디버깅의 어려움

이 있다.

profile
안녕 세계!

0개의 댓글