쓰레드의 종류
- 사용자 수준 쓰레드 : 커널 위에서 지원(=라이브러리 활용)
- 커널 수준 쓰레드 : 운영체제에서 지원하는 쓰레드
사용자 쓰레드 - 커널 쓰레드
사용자 쓰레드와 커널 쓰레드가 어떠한 관계를 맺고 있는지 보자.
다대일 모델 (many-to-1)
다수의 사용자 수준 쓰레드 → 1개의 커널 쓰레드
-
다수의 사용자 수준 쓰레드는 라이브러리로 관리됨.
- 따라서 효율적임.
-
그러나 한 쓰레드가 봉쇄형 시스템 콜을 걸으면 전체 프로세스가 막힘.
-
한 번에 하나의 쓰레드만 실행할 수 있기에, 하드웨어가 멀티코어여도
다중 쓰레드의 병렬 실행이 불가능함.
-
Sun microsystems(자바 개발사)의 Green thread가 대표적인 예시.
일대일 모델 (1 by 1)
1개의 사용자 수준 쓰레드 → 1개의 커널 쓰레드
- 각 사용자 수준 쓰레드를 각 커널 쓰레드가 담당.
- 봉쇄적 시스템 콜을 실행해도 전체 프로세스는 막히지 않음.
- 멀티코어에서 다중 쓰레드의 병렬실행이 가능
- 그러나, 커널 쓰레드가 계속 만들어져 성능에 악영향을 줄 수 있음.
다대다 모델 (many-to-many)
다수의 사용자 수준 쓰레드 → 다수의 커널 쓰레드
- 다대일 모델과 일대일 모델의 단점을 모두 극복
- 필요한 만큼 사용자 수준 쓰레드를 생성 가능
- 봉쇄적 시스템 콜을 실행해도 전체 프로세스가 안 막힘
- 다중 쓰레드의 병렬실행이 가능.
- 단점은 만들기 어렵다는 것이다.
가장 흔한 모델은?
- 보통 일대일을 많이 쓴다.
- 왜? 하드웨어의 발달로 많은 커널 쓰레드를 처리할 수 있어서
- 다만, 일부 라이브러리는 다대다 모델을 사용