열렬히.뛰기

다중 쓰레드 모델

운영체제 > Part 2 : 프로세스 관리 > 공룡책 4장 : 쓰레드 > 다중 쓰레드 모델

쓰레드의 종류

  • 사용자 수준 쓰레드 : 커널 위에서 지원(=라이브러리 활용)
  • 커널 수준 쓰레드 : 운영체제에서 지원하는 쓰레드

사용자 쓰레드 - 커널 쓰레드

사용자 쓰레드와 커널 쓰레드가 어떠한 관계를 맺고 있는지 보자.

다대일 모델 (many-to-1)

다수의 사용자 수준 쓰레드 → 1개의 커널 쓰레드

  • 다수의 사용자 수준 쓰레드는 라이브러리로 관리됨.

    • 따라서 효율적임.
  • 그러나 한 쓰레드가 봉쇄형 시스템 콜을 걸으면 전체 프로세스가 막힘.

  • 한 번에 하나의 쓰레드만 실행할 수 있기에, 하드웨어가 멀티코어여도

    다중 쓰레드의 병렬 실행이 불가능함.

  • Sun microsystems(자바 개발사)의 Green thread가 대표적인 예시.

일대일 모델 (1 by 1)

1개의 사용자 수준 쓰레드 → 1개의 커널 쓰레드

  • 각 사용자 수준 쓰레드를 각 커널 쓰레드가 담당.
    • 봉쇄적 시스템 콜을 실행해도 전체 프로세스는 막히지 않음.
    • 멀티코어에서 다중 쓰레드의 병렬실행이 가능
  • 그러나, 커널 쓰레드가 계속 만들어져 성능에 악영향을 줄 수 있음.

다대다 모델 (many-to-many)

다수의 사용자 수준 쓰레드 → 다수의 커널 쓰레드

  • 다대일 모델과 일대일 모델의 단점을 모두 극복
    • 필요한 만큼 사용자 수준 쓰레드를 생성 가능
    • 봉쇄적 시스템 콜을 실행해도 전체 프로세스가 안 막힘
    • 다중 쓰레드의 병렬실행이 가능.
  • 단점은 만들기 어렵다는 것이다.

가장 흔한 모델은?

  • 보통 일대일을 많이 쓴다.
    • 왜? 하드웨어의 발달로 많은 커널 쓰레드를 처리할 수 있어서
  • 다만, 일부 라이브러리는 다대다 모델을 사용