SERVER CONCURRENCY

동시성 CPU 활용

같은 세 개의 요청도 실행 모델에 따라 대기열에 쌓이거나, 별도 스레드에서 막히거나, 이벤트 루프에서 짧게 나뉘어 처리됩니다.

싱글 스레드

I/O 대기와 요청 지연

Req A DB 응답을 기다리는 동안 실행 흐름이 멈춥니다.
Req B 앞 요청이 끝날 때까지 큐에서 대기합니다.
Req C 구현은 단순하지만 지연이 연쇄됩니다.
one call stack
멀티스레드

블로킹 I/O를 각 스레드가 따로 감당한다

Thread A DB 응답을 기다려도 다른 스레드는 실행됩니다.
Thread B 코어가 충분하면 Thread A와 Thread B가 같은 시간 구간에 서로 다른 코어에서 실행됩니다.
Thread C 공유 메모리는 락과 소유권 규칙이 필요합니다.
many stacks
이벤트 기반

논블로킹 이벤트 처리

Task A I/O를 제출한 뒤 이벤트 루프에 제어를 돌려줍니다.
Task B 대기 시간 사이에 다른 콜백을 처리합니다.
Task C CPU 작업이 길면 루프 전체가 늦어집니다.
event loop
응답성 사용자 요청이나 UI 이벤트가 긴 I/O에 막히지 않아야 합니다.
경제성 스레드는 프로세스보다 가볍지만 많아지면 스택과 전환 비용이 누적됩니다.
병렬성 CPU 바운드 작업은 멀티코어에서 실제로 동시에 실행될 때 빨라집니다.