1. 쓰레드 타입 (Thread Type)
[1] 싱글-코어, 싱글 쓰레드(single-core,single-thread)
예전의 CPU 는 하나의 코어와 하나의 물리 쓰레드(H/W thread) 를 매핑해 관리했다. 하지만 프로세스의 동기 작업으로 인해 쓰레드가 대기하거나 프로그램을 메모리에 데이터를 적재하는 시간에는 CPU core 를 활용하지 못하는 문제가 있었다. 이와 같은 문제를 개선하고자 도입된 방법이 하이퍼 쓰레드(hyper thread) 이다. 하이퍼 쓰레드(hyper thread) 는 하나의 코어에 두 개의 물리 쓰레드(H/W thread) 를 할당해 core 의 효율을 높히는 방법이 도입된다.
[2] 하드웨어 쓰레드(hardware thread)
물리 쓰레드(H/W thread) 는 OS 관점에는 가상 코어(logical core) 이다. 만약 싱글 코어 CPU 에 H/W thread 가 두 개라면 OS 관점에서는 듀얼 코어로 인식하여 OS 레벨 스레드를 스케줄링한다.
[3] 커널 쓰레드(kernel thread)
커널(kernel) 은 운영체제의 핵심이다. 시스템 전반을 관리/감독하며, 하드웨어(H/W) 관련된 작업을 직접 수행하여 자원을 보호하는 역할을 한다. 운영체제에서는 크게 kernel thread 와 user thread 로 나뉘는데 커널 레벨에서 생성되고 관리되는 스레드는 OS thread 라 부른다. OS thread 는 CPU 를 실제로 실행하는 단위이며, CPU 스케줄링 단위이다. OS 스레드는 컨텍스트 스위칭 때 커널이 직접 개입하기 때문에 그만큼 비용이 발생한다. 사용자 코드, 커널 코드 모두 OS thread 에서 실행된다. (다른 용어로 native thread, kernel thread, kernel-level thread, os-level thread 이다.)
[4] 유저 쓰레드(user thread)
유저 쓰레드는 유저 레벨에서 생성되고 관리되는 쓰레드이다. 스레드 개념을 프로그래밍 레벨로 추상화한 것을 말한다. 가장 대표적인 사례가 Java 이다. java.lang.Thread 클래스를 run() 메서드를 확인해보면 start0() 메서드가 JNI(Java native interface) 에서 제공하는 native method 임을 확인해볼 수 있다. 해당 운영체제가 리눅스의 경우 clone() system call 을 호출해 os-level thread 를 생성하고 Java 의 thread(platform thread) 와 매핑된다. (유저 쓰레드는 CPU 에서 실행되기 위해서는 OS 쓰레드와 반드시 매핑되어야 한다.)
2. 쓰레드 모델 (Thread model)
[1] One-To-One
하나의 OS thread 와 하나의 user thread 가 매핑되는 방식을 발한다. 이 방식은 스레드 스케줄링을 OS 에 위임해 커널이 수행한다. 모두 같은 Process 에 속하는 쓰레드의 경우 하나의 user thread block I/O 를 수행해도 다른 쓰레드는 정상 동작한다.
[2] Many-To-One
하나의 OS thread 와 여러 개의 user thread 가 매핑되는 방식을 말한다. 이 방식은 컨텍스트 스위칭이 빠르다. 커널 쓰레드의 개입이 없기 때문이다. 이 방식은 OS level 에서 race condition 이 발생하지 않고 user thread 간의 race condition 이 발생해 상대적으로 race condition 이 발생 확률이 적다. 하지만 user thread 에서 blcok I/O 가 발생하면 다른 user thread 모두 block 될 수 있는 단점이 있어 유의해야 한다. Java 21 은 virtual thread 도입하며 user thread 를 지원한다.
[3] Many-To-Many
여러 개의 OS thread 와 여러 개의 user thread 가 매핑되는 방식을 말한다. 두 모델의 단점을 모두 활용한 모델이며, Go 언어에서 지원하는 모델로 알려져 있다.
Reference
'cs' 카테고리의 다른 글
캐시 정리 (Cache Summary) (0) | 2025.03.09 |
---|---|
해시 테이블(Hash Table) (0) | 2024.02.19 |
Multi Programming, Processing, Tasking, Threading (1) | 2024.02.16 |
가상 메모리 (Virtual Memory) (0) | 2024.01.26 |