스레드 매핑 선도

논리 스레드가 커널 스레드에 올라타는 방식이 병렬성을 결정한다

사용자 스레드는 런타임이 다루고, 커널 스레드는 운영체제가 CPU에 배치한다. 둘의 연결 비율이 blocking 범위와 멀티코어 활용을 가른다.

연결 비율로 보는 세 가지 모델

blocking 위치와 병렬성
many to one

여러 사용자 스레드가 커널 스레드 하나를 공유

전환 비용 낮음 syscall block 위험

커널은 U1, U2, U3를 모르므로 하나가 막히면 전체 프로세스가 멈출 수 있다.

one to one

사용자 스레드마다 커널 스레드가 생김

멀티코어 활용 스택·전환 비용

pthread와 Win32 스레드처럼 단순하고 강하지만, 수만 개를 만들면 커널 자원이 부담된다.

many to many

런타임이 많은 논리 작업을 carrier 위에 배치

I/O 동시성 pinning 감시

고루틴과 Java 가상 스레드는 blocking 지점에서 park와 resume을 런타임이 조율한다.

blocking syscall이 전체를 세우는가

many to one에서는 커널이 논리 작업을 모르므로 막힘이 크게 번진다.

CPU 작업은 실제 KLT 수를 본다

가상 스레드를 많이 만들어도 CPU-bound 작업은 carrier를 점유한다.

런타임 신호를 따로 본다

executor starvation, goroutine preemption, virtual thread pinning을 확인한다.

스레드 수보다 대기 원인이 먼저다

I/O 대기, 락 경합, CPU 포화에 따라 해법이 완전히 달라진다.