Skip to content

스레드 모델

sue06004 edited this page Jul 17, 2023 · 3 revisions

스레드(Thread)

사용자 수준 스레드, 커널 수준 스레드

  • 사용자 수준 스레드: 사용자 수준의 스레드 라이브러리가 만든 스레드로, 스레드가 생성 된 프로세스의 주소 공간에서 해당 프로세스에 의해 실행되고 관리된다.
  • 커널 스레드: 커널에 의해 생성되고 운영체제에 의해 직접 관리된다.

스레드 모델

다대일 모델 (Many to One Model)

  • 하나의 커널 스레드에 여러 개의 유저 스레드를 연결하는 모델.
  • 사용자 수준에서 스레드 관리가 이루어진다.
  • 한 번에 하나의 유저 스레드만 커널에 접근할 수 있기 때문에 멀티코어 시스템에서 병렬적인 수행을 할 수가 없다.
  • 요즘에는 잘 사용되지 않는다.

일대일 모델 (One to One Model)

  • 하나의 유저 스레드에 하나의 커널 스레드가 대응하는 모델
  • 사용자 스레드가 생성되면 그에 따른 커널 스레드가 생성된다.
  • 동시성을 높여주고, 멀티 프로세서 시스템에서 동시에 여러 스레드를 수행할 수 있도록 해준다.
  • 커널 스레드를 생성하는 것은 오버헤드가 큰 작업이기 때문에 성능 저하가 발생할 수 있다.
  • 윈도우와 리눅스가 이 모델을 구현하고 있다.

다대다 모델 (Many to Many Model)

  • 여러 유저 스레드에 더 적거나 같은 수의 커널 스레드가 대응하는 모델
  • 가장 높은 정확도의 동시성 처리를 제공하는 모델

Java Thread Model### ##

Green Thread, Native Thread

자바는 초기 Green Thread를 사용하다가 JDK 1.3 이후로 Native Thread로 스레드 모델을 변경하였다.

  • Green Thread
    • 다대일 모델
    • 동기화 및 자원 공유가 용이하여 실행시간이 단축됨
    • 멀티 코어 시스템의 이점을 살릴 수 없음
  • Native Thread
    • 다대다 모델
    • 높은 정확도의 동시성 처리, 멀티 코어 시스템을 활용할 수 있음
    • 스레드 동기화 및 자원 공유가 복잡함 -> 실행 시간 증가

대부분의 시스템에서 처리 코어 수가 증가하는 추세라, 커널 스레드의 수를 제한하는 것의 중요성이 약해졌다. 그래서 요즘은 거의 일대일 모델을 이용한다. 또한 jvm에 따라 다르지만 기본적으로 자바에서도 일대일 모델을 사용한다.