Zettelkasten

I∕O 멀티 플렉싱은 여러 I∕O 채널을 감시하는 문제를 해결한다

·수정 2026.04.23·수정 1

요약

  • I/O 멀티 플렉싱은 여러 채널 감시 문제를 해결함, 이벤트 루프 구조를 이해하는데 도움을 줌

본문

  • 여러 소켓을 처리하는 방법은 크게 두가지임
  1. blocking I/O + 스레드/프로세스 per connection
    • 소켓마다 전담 스레드를 붙여서 read()에서 block되게 둔다.
    • 문제: 연결이 수천~수만 개가 되면 스레드 수가 그만큼 늘어나고 각 스레드의 스택 메모리와 context switching 비용이 커진다.(Dan Kegel 1991 C10K Problem)
  2. non blocking I/O + busy polling
    • 각 소켓을 non-blocking으로 설정하고 루프에서 하나씩 read()를 시도하면서 EAGAIN이면 다음으로 넘어감
    • 문제: 데이터가 없어도 계속 syscall을 호출하므로 CPU를 낭비함

이 둘을 해결하는게 I/O multi plexing

  • epoll_wait() 같은 단일 syscall로 여러 fd를 등록해 두고 block함
    • epoll_wait:
  • 어떤 fd든 그때 깨어나서 해당 fd만 처리함

참고