Skip to content

유저, 커널레벨 스레드

유저레벨 스레드(Green Thread)

유저 레벨 스레드는 VM이나 Library 등에서 관리되는 스레드이다. 프로그래밍언어를 사용해서 Thread 라이브러리를 당겨와 스레드를 만들면 유저레벨 스레드가 생성된다.

커널은 사용자 레벨 스레드의 정보를 가지고 있지 않고, 사용자 레벨 스레드가 실행되기 위해서는 커널 스레드의 도움을 받아야 한다.

커널레벨 스레드(Native Thread)

커널 레벨에서 생성되는 스레드로, 실제 스레드 동작을 관리하는 주체이다. 커널이 직접 스케줄링하고, 스레드에 관한 정보를 커널이 직접 가지고 있다.

커널 레벨 스레드를 여러개 만들면 동시에 여러 CPU코어에 CPU burst를 요청할 수 있다. 만약 유저레벨 스레드가 커널 레벨 스레드와 1:1로 연결되어있고, CPU코어가 8개면 한 시점에 8개의 코어가 내 프로그래밍 언어의 스레드를 위해 일할 수 있는 것이다.

유저 모드에서 커널 모드로의 전환이 빈번하게 이뤄지면 성능 저하가 발생한다.

Multithreading Model 3가지

유저 레벨 스레드와 커널 레벨 스레드는 서로 연결되어 동작하는데, 그 연결 구조는 아래와 같은 세가지 유형으로 분류할 수 있다.

image

1. Many-to-one

여러개의 유저 스레드가 하나의 커널 스레드에 매핑되는 방식이다.

유저 레벨 라이브러리로 관리되므로 속도가 빠르고 이식성이 좋지만 스레드 하나가 중지되면 나머지도 영향을 끼칠 수 있다.

2. One-to-one

하나의 유저 스레드를 하나의 커널 스레드와 매핑하는 방식이다.

한 스레드가 중지되어도 다른 스레드에 영향이 없으므로 동시성이 좋지만 자원 효율이 안좋다.

3. Many-to-many

여러개의 유저 스레드를 여러개의 커널 스레드로 매핑하는 방식이다.

1 & 2의 장점들을 모두 가지지만 구현이 어렵다.