프로세스와 스레드 비교
설명 영상 프로세스와 스레드 비교 · 2:14
핵심 정리
프로세스는 실행 중인 프로그램의 단위이고, 스레드는 그 프로세스 안에서 제어를 나눠 맡는 실행 단위다. 스레드는 프로세스에서 제어를 분리한 실행 단위라는 점이 이 개념의 뼈대다. 프로세스는 별도의 주소 공간을 가지지만, 스레드는 같은 프로세스의 주소 공간을 함께 쓴다. 스레드는 속한 프로세스의 자원과 메모리를 공유한다. 각 스레드는 프로그램 카운터를 독립적으로 가진다. 따라서 스레드는 자원을 공유하면서도 각자 별도의 실행 흐름을 유지한다. 스레드는 프로세스보다 생성과 문맥 교환의 오버헤드가 작다. 다만 주소 공간을 공유하면서 생기는 대가도 함께 알아야 한다. 스레드는 사용자 스레드와 커널 스레드로 구분되며, 다중 스레드는 사용자의 응답성을 높인다. 단일 CPU에서 여러 스레드는 CPU를 번갈아 사용하며 자원을 공유한다. 사용자 스레드를 커널 스레드에 어떻게 대응시키느냐에 따라 모델별 병렬 수행과 블로킹 여부가 달라진다. 이 두 기준으로 스레드 모델을 구분한다.
자세히
자원 공유와 실행 흐름의 분리
프로세스와 스레드를 비교할 때는 무엇을 나누고 무엇을 공유하는지 살펴봐야 한다. 아래 표는 두 실행 단위를 항목별로 비교한다.
| 구분 | 프로세스 | 스레드 |
|---|---|---|
| 주소 공간 | 각자 독립된 주소 공간을 가진다 | 속한 프로세스의 주소 공간을 공유한다 |
| 자원과 메모리 | 각자 따로 가진다 | 속한 프로세스의 자원과 메모리를 공유한다 |
| 생성과 문맥 교환 | 상대적으로 비용이 크다 | 상대적으로 비용이 작다 |
| 상호 작용 | 시스템이 제공하는 프로세스 간 통신을 거친다 | 공유한 데이터와 코드로 직접 통신한다 |
표에서 보듯 스레드의 비용이 작은 이유는 같은 주소 공간을 쓰기 때문이다. 다만 일부 아키텍처에서는 주소 공간 전환 비용이 따로 발생하며, 변환 색인 버퍼(TLB) 플러시도 함께 일어난다. 주소 공간 전환 비용을 제외하면 두 단위의 차이가 크지 않다는 설명도 있으므로, 비용 차이를 말할 때는 주소 공간 전환 여부를 먼저 확인한다.
스레드 모델과 병렬 수행
사용자 스레드를 커널 스레드에 어떻게 대응시키느냐에 따라 실행 방식이 달라진다. 사용자 스레드를 커널 스레드와 일대일로 대응시키면 여러 처리기에서 동시에 실행할 수 있다. 반면 여러 사용자 스레드를 하나의 흐름에 묶으면 한 스레드가 입출력을 기다릴 때 나머지 스레드도 모두 멈춘다. 따라서 모델을 비교할 때는 병렬 수행 가능 여부와 블로킹이 미치는 범위를 함께 살펴봐야 한다.
이어지는 내용
- 장애 격리와 주소 공간
- 스레드 풀과 응답성
- 자주 헷갈리는 것
- 기출에서는
로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 절 읽기