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

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