Thread란
Process에서 정의된 프로세스의 절차에 따라, CPU에 작업을 요청하는 실행 단위를 의미합니다.
프로세스 자원 이용 방식
스레드는 프로세스의 stack과 레지스터만 개별적으로 할당받으며, 나머지 영역인 Code, data, heap은 다른 스레드들과 공유합니다.

위 그림은 스레드와 프로세스가 각각 어떤 자원을 할당받는지를 보여줍니다. 실제로 thread 그림에는 stack만 표시되어 있지만, register 역시 포함되어야 합니다.
멀티프로세싱보다 멀티스레딩이 더 나은가
여러 개의 프로세스를 구동하는 Multi Processing 방식보다, 하나의 프로세스 내에서 여러 스레드를 실행하는 multi threading 방식이 다양한 장점을 가집니다.
장점
- Context Switching
- 프로세스 간 Context Switching 시에는 CPU 레지스터 교체뿐 아니라 RAM과 CPU 사이의 cache memory 데이터까지 초기화해야 하므로 오버헤드가 큽니다.
- 반면, 스레드 간 Context Switching에서는 stack 영역만 처리하면 되므로 오버헤드가 적습니다.
- 스레드는 stack과 Register를 제외한 모든 자원을 공유하므로, 프로세스 간 통신(IPC)보다 스레드 간 통신 비용이 훨씬 적게 듭니다.
단점
- Data 영역(전역 변수 저장 공간)을 여러 스레드가 공유하기 때문에, 해당 타입의 변수를 사용할 때 충돌이 발생할 수 있습니다.
사용자 수준 스레드와 커널 수준 스레드
운영체제에 따라 쓰레드는 다양한 방식으로 구현될 수 있으며, 주로 아래 세 가지 형태로 나뉩니다.
- 사용자 수준 쓰레드 (다대일 매핑)
- 여러 개의 사용자 수준 쓰레드는 하나의 커널 수준 쓰레드에 매핑됩니다.
- 커널이 관여하지 않고 쓰레드를 독립적으로 스케줄링할 수 있어 이식성과 유연성이 높습니다.
- 하지만 다중 처리 환경에서도 쓰레드 단위 병렬 처리가 불가능하다는 한계가 있습니다.
- 커널 수준 쓰레드 (일대일 매핑)
- 사용자 수준 쓰레드를 생성하면 이에 대응되는 커널 쓰레드도 함께 생성됩니다.
- 커널이 직접 각 쓰레드를 관리하고 실행하므로 사용자 수준에서 발생하는 지원 문제를 해결할 수 있습니다.
- 그러나 커널이 모든 정보(프로세스 및 쓰레드)를 유지해야 하기에 오버헤드는 증가합니다.
- 혼합형 쓰레드 (다대다 매핑)
- 사용자 수준과 커널 수준을 혼합하여 구현한 구조입니다.
