Select와 epoll은 모두 다중 채널 I/O 메커니즘에 대한 솔루션이지만 Select는 POSIX 표준에 있는 반면 epoll은 Linux에 고유합니다.
epoll의 가장 큰 장점은 FD 개수가 늘어나도 효율성이 떨어지지 않는다는 점입니다. select에서는 데이터 구조가 배열 데이터 구조와 비슷하지만 큐가 있는지 직접 확인할 수 있습니다. 비어 있습니다.
nginx는 epoll을 사용하여 I/O 다중화를 달성하고 높은 동시성을 지원합니다. 현재 nginx는 높은 동시성 시나리오에서 점점 더 널리 사용되고 있습니다.
select의 한 가지 단점은 단일 프로세스가 모니터링할 수 있는 파일 설명자 수에 최대 제한이 있다는 것입니다.
에폴:
(1) 모니터링되는 fd 수가 증가하더라도 IO의 효율성은 감소하지 않습니다. Epoll은 select, poll의 폴링 방식과 다르지만 각 fd에서 정의한 콜백 함수를 통해 구현된다. 준비된 fd만이 콜백 함수를 실행합니다.
(2) 레벨 트리거링 및 에지 트리거링 지원(어떤 파일 설명자가 방금 준비되었는지 프로세스에 알리고 한 번만 알리고, 조치를 취하지 않으면 다시 알리지 않습니다. 이 방법을 에지 트리거링이라고 합니다) 두 가지 방법을 사용하면 이론적으로 에지 트리거링의 성능이 더 높지만 코드 구현이 상당히 복잡합니다.
(3) 좋은 준비 이벤트 알림 메커니즘이 있습니다
선택:
(1) 단일 프로세스가 모니터링할 수 있는 fd 수는 제한되어 있습니다. 32비트 시스템에서 관리할 수 있는 최대 fd 수는 1024개입니다.
(2) 소켓을 선형적으로 스캔하므로 소켓 파일 디스크립터 수가 늘어나면 많은 시간이 낭비됩니다.