Blocking vs Multiplexing
I/O 멀티플렉싱은 기다림을 한곳에 모은다
blocking-per-connection 모델은 각 연결이 자기 스레드에서 기다린다. 멀티플렉싱 모델은 하나의 대기 루프가 여러 소켓의 준비 상태를 보고, 준비된 것만 처리한다.
문제의 핵심은 처리 시간보다 대기 중인 스레드 비용
준비되지 않은 소켓은 깨우지 않고 넘어간다
실제 서버는 non-blocking I/O와 worker pool을 함께 쓴다
Blocking I/O
연결마다 기다리는 실행 단위가 필요
Thread 1
Thread 2
Thread 3
Thread N
연결 수가 늘면 스택 메모리와 스케줄링 비용이 같이 커진다.
I/O Multiplexing
하나의 루프가 준비된 소켓만 깨움
select / poll / epoll / kqueue
여러 fd를 감시하고 ready 이벤트만 애플리케이션에 전달한다.
Socket A읽기 가능 → 처리
Socket B아직 조용함
Socket C새 연결 → accept
읽는 법: 멀티플렉싱은 “모든 일을 한 스레드가 영원히 다 한다”가 아니라, 네트워크 대기를 중앙화해 준비된 작업만 처리하도록 만드는 구조다.