여러 사용자 스레드가 커널 스레드 하나를 공유
전환 비용 낮음
syscall block 위험
커널은 U1, U2, U3를 모르므로 하나가 막히면 전체 프로세스가 멈출 수 있다.
사용자 스레드는 런타임이 다루고, 커널 스레드는 운영체제가 CPU에 배치한다. 둘의 연결 비율이 blocking 범위와 멀티코어 활용을 가른다.
커널은 U1, U2, U3를 모르므로 하나가 막히면 전체 프로세스가 멈출 수 있다.
pthread와 Win32 스레드처럼 단순하고 강하지만, 수만 개를 만들면 커널 자원이 부담된다.
고루틴과 Java 가상 스레드는 blocking 지점에서 park와 resume을 런타임이 조율한다.
many to one에서는 커널이 논리 작업을 모르므로 막힘이 크게 번진다.
가상 스레드를 많이 만들어도 CPU-bound 작업은 carrier를 점유한다.
executor starvation, goroutine preemption, virtual thread pinning을 확인한다.
I/O 대기, 락 경합, CPU 포화에 따라 해법이 완전히 달라진다.