User Thread
런타임이 사용자 공간에서 스케줄링하고 커널은 하나의 실행 흐름만 봅니다.
사용자 코드가 만든 실행 단위가 실제 OS 스레드와 어떻게 연결되는지가 블로킹, 병렬성, 생성 비용을 결정합니다.
런타임이 사용자 공간에서 스케줄링하고 커널은 하나의 실행 흐름만 봅니다.
각 사용자 스레드가 OS 스레드 하나와 연결되어, 코어가 여러 개면 서로 다른 스레드가 같은 시간 구간에 실행됩니다.
많은 작업을 적은 OS 스레드 위에 올리고 런타임이 작업을 옮겨 태웁니다.
await 또는 suspend 지점에서 자발적으로 양보해 이벤트 루프가 다른 작업을 실행합니다.
동기식 코드처럼 작성하지만 블로킹 때 런타임이 carrier 스레드에서 분리합니다.
이미지 처리, 암호화, 행렬 연산처럼 계산이 중심이면 코어 수 근처의 커널 스레드나 프로세스를 씁니다.
DB, 파일, 네트워크 대기가 크면 코루틴, 고루틴, 가상 스레드처럼 대기 중 양보 가능한 모델이 유리합니다.
런타임이 모르는 블로킹 호출은 worker를 묶어 둘 수 있으므로 전용 풀이나 비동기 API로 분리합니다.