Blocking vs Multiplexing

I/O 멀티플렉싱은 기다림을 한곳에 모은다

blocking-per-connection 모델은 각 연결이 자기 스레드에서 기다린다. 멀티플렉싱 모델은 하나의 대기 루프가 여러 소켓의 준비 상태를 보고, 준비된 것만 처리한다.

문제의 핵심은 처리 시간보다 대기 중인 스레드 비용
준비되지 않은 소켓은 깨우지 않고 넘어간다
실제 서버는 non-blocking I/O와 worker pool을 함께 쓴다
Blocking I/O

연결마다 기다리는 실행 단위가 필요

Thread 1
recv() 대기처리
Thread 2
recv() 대기휴면
Thread 3
긴 대기send
Thread N
대기 누적context switch
연결 수가 늘면 스택 메모리와 스케줄링 비용이 같이 커진다.
I/O Multiplexing

하나의 루프가 준비된 소켓만 깨움

wait

select / poll / epoll / kqueue

여러 fd를 감시하고 ready 이벤트만 애플리케이션에 전달한다.
Socket A읽기 가능 → 처리
Socket B아직 조용함
Socket C새 연결 → accept

읽는 법: 멀티플렉싱은 “모든 일을 한 스레드가 영원히 다 한다”가 아니라, 네트워크 대기를 중앙화해 준비된 작업만 처리하도록 만드는 구조다.