3.9 IOCP
epoll은 논블록 소켓을 대량으로 갖고 있을 때 효율적으로 처리해 주는 API입니다. 이에 질세라 Overlapped I/O를 다루는 운영체제에서 대응한 것이 바로 I/O Completion Port 혹은 IOCP라는 것입니다. 사실 epoll보다 IOCP가 훨씬 먼저 세상에 등장했습니다.5
그럼에도 IOCP를 맨 마지막에 소개하는 이유는 IOCP를 이해하려면 앞서 다룬 내용을 모두 이해해야 하기 때문입니다.
IOCP는 소켓의 Overlapped I/O가 완료되면 이를 감지해서 사용자에게 알려 주는 역할을 합니다. 그림 3-20을 보면 소켓 2가 완료되는 순간 IOCP는 이 상황을 내장된 큐에 푸시합니다.
▲ 그림 3-20 소켓 2의 I/O가 완료하고 있는 상황
5 epoll은 2002년경에 등장했고, IOCP는 1993년경에 등장했습니다.