User Thread
사용자 영역의 스레드로 개발자가 API를 사용하여 직접 관리할 수 있는 쓰레드다.
대표적인 예로는 다음과 같은 것들이 있다.
- Java의 Virtual Thread
- C의 Pthread
- Go의 goroutine
Kernel Thread
운영체제에서 관리하는 쓰레드로 OS Thread 라고도 한다.
Relatinship between User thread and Kernel Thread
User thread - OS thread 는
Many-to-One, One-to-One, Many-to-Many 로 나뉜다.
Many-to-One
장점
- User thread 생성을 개발자가 원하는 만큼 값싼 비용으로 할 수 있다.
- User thread 간 Kernel 레벨의 Context Switching 이 없다.
단점
- OS Thread가 시스템콜 함수를 호출하여 blocking 되면 매핑된 모든 User thread 또한 blocking 된다.
- 아무리 user thread 를 많이 생성해도
매핑된 Kernel thread가 하나므로, 실제 점유받는 CPU 또한 하나가 최대 값이다.
One-to-One
장점
- 특정 User thread 가 system call 함수를 호출하여 blocking 상태여도 다른 thread 는 영향받지 않는다.
- CPU만 충분하면 user thread 를 모두 병렬처리 할 수 있다.
단점
- User thread 생성 비용이 Kernel thread 생성 비용과 같다.
즉, Many-To-One보다 비싸다.
(동적으로 user thread 를 미친듯이 생성할 경우 애플리케이션 성능 저하의 원인이 될 수도 있다.) - User thread 생성 개수 == Kernel thread 생성 개수기 때문에 OS에 따라 개수가 제한될 수 있다.
Many-To-Many
장점
- User thread 를 자유롭게 생성할 수 있다.
- System call 로 한 kernel thread 가 blocking 되어도 다른 kernel thread 에 의해 user thread 작업을 실행할 수 있다.
단점
- 여전히 system call 함수 호출 작업은 kernel thread 수에 의해 병렬성이 결정된다.
병렬성(Parallelism)은 결국
Min(CPU 수, Kernel thread 수)가 결정한다.
'Low Level > OS' 카테고리의 다른 글
Virtual Memory (0) | 2020.03.18 |
---|---|
Interrupt 동작과정 (feat. System Call) (0) | 2020.03.05 |