Green Thread vs Kernel Thread

최승혁·2022년 6월 28일
0

Green Thread (User-level Thread)
Kernel Thread (Kernel-level Thread)

정의

컴퓨터 프로그래밍에서 녹색 스레드는 기본적으로 기본 운영 체제가 아닌 런타임 라이브러리 또는 가상 머신에 의해 예약된 스레드입니다. 그린 스레드는 기본 OS 기능에 의존하지 않고 다중 스레드 환경을 에뮬레이트하며 커널 공간 대신 사용자 공간에서 관리 되므로 기본 스레드 지원이 없는 환경에서 작동할 수 있습니다.

from wiki

VM이나 Library(#include) 등에서 관리되는 스레드로, 프로그래밍 언어를 사용해서 Thread 라이브러리를 통해 스레드를 만들면 유저 레벨 스레드가 생성된다. 커널에 진입하지 않아도 되며, 사용자 영역에서 스레드 연산을 수행한다.

운영체제는 프로세스 안에서 여러 스레드가 있다는 것을 모르기 때문에 커널은 하나의 프로세스로 인식한다. 따라서 하나의 스레드가 중단되면 같은 프로세스 내의 모든 스레드가 중단된다.

동일한 메모리 영역에서 스레드가 생성, 관리되어 동기화와 같은 작업이 필요 없어 속도가 빠르다.

장점

  • 스케쥴링과 동기화를 위해 System Call을 하지 않기 때문에 오버헤드가 적다.
  • 커널이 스레드 존재를 모르기 때문에 유저 모드와 커널 모드 간 전환이 없다.

단점

  • 스케쥴링 우선순위를 지원하지 않으므로 어떤 스레드가 먼저 동작할 지 모름
  • 하나의 스레드가 System Call 하면 해당 프로세스 내 모든 스레드가 중단

커널 레벨 스레드

프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다.

from wiki

커널 레벨 스레드는 OS에서 구현된다. 운영 체제가 프로세스 내에서 여러 스레드가 있다는 것을 알고 있기 때문에 커널이 스레드의 생성 및 스케줄링을 관리 한다. (유저 스레드 1개당 커널 스레드가 1개일 때)

한 스레드가 중단되어도, 같은 프로세스 내의 다른 스레드들은 계속 실행 가능하다. 사용자 레벨 스레드에 비교하여 생성 및 관리가 느리다.

장점

  • 커널이 각 스레드 개별적으로 관리할 수 있음
  • 동작 중인 스레드가 System Call 해도 해당 프로세스 내 다른 스레드가 계속 실행될 수 있음

단점

  • 스케쥴링과 동기화를 위해 System Call 하는데 오래 걸림
  • 유저 모드와 커널 모드 간 전환이 빈번하여 성능 저하

비교 표

연결 방식

유저 레벨 스레드는 커널 레벨 스레드와 1:1 방식, n:1 방식, 혼합 방식 등으로 연결 된다.

  • Pure user-level: 커널 스레드 1개당 사용자 스레드 n개, 1:n 방식
  • Pure Kernel-level: n개의 커널 스레드가 n개의 사용자 스레드를 담당, 1:1 방식
  • Combined: 커널 스레드와 사용자 스레드를 혼합하여 사용하는 방식
[참고자료]
profile
그냥 기록하는 블로그

0개의 댓글