select
- 전통적인 방식으로, 대부분의 os가 지원.
- 프로세스가 커널에 파일 디스크립터(이하 FD) 상태를 직접 조회.
- 한 번에 다수의 FD를 조회하여 I/O 상태를 관찰.
- 때문에 무한 루프 방식으로 지속된 polling 필요 (CPU 낭비).
- 한 번에 조회할 수 있는 FD의 수는 1024로 제한됨.
- timeout 사용 방식에 따라 blocking이 될 수도, non-blocking이 될 수도 있음.
poll
- 기본적인 작동 방식은 select와 유사함.
- 조회 FD의 개수 제한이 없음.
- select에 비해 os specific하여, 이식성이 상대적으로 나쁨.
epoll
- 개선된 poll으로, 이벤트 기반으로 작동.
- 관리 FD 개수 무제한.
- 커널이 FD의 상태를 직접 관리하며, 상태가 변경된 FD를 던져줌.
- 때문에 커널로의 통신에 따른 오버헤드가 대폭 줄어듦.
IOCP (Input/Output Completion Port / Overlapped IO)
- 입출력을 담당할 포트를 지정하여 처리.
- 내부에 큐를 두어, 입출력이 완료되었음을 큐에 저장.
- non-blocking. 백그라운드로 작동.
- async 방식으로, 콜백 사용 가능.