NETWORK · CH11

epoll (Linux)

epoll은 관심 fd를 커널에 등록해 두고 준비된 이벤트만 돌려받아 대규모 연결을 효율적으로 처리합니다.

핵심 분해

커널 이벤트
관심 fd 등록epoll_ctl로 감시할 fd와 이벤트 종류를 커널에 저장합니다.
커널 대기커널은 등록된 fd의 준비 상태를 감시합니다.
이벤트 반환epoll_wait는 준비된 이벤트 목록만 사용자 공간으로 돌려줍니다.
처리 비용 감소전체 fd 순회 대신 발생한 이벤트만 순회합니다.

흐름으로 읽기

flow
epoll_ctl관심 fd 등록
kernel준비 상태 감시
epoll_wait이벤트 목록 반환
select/poll과 차이

select와 poll은 매번 관심 목록을 넘기고 훑지만, epoll은 등록과 대기를 분리해 반복 비용을 줄입니다.

epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev);
n = epoll_wait(epfd, events, max, -1);
for each ready event: handle(event.fd);