event loop state

I/O 이벤트 루프는 등록, 대기, 처리, 재등록을 반복한다

멀티플렉싱 서버는 모든 소켓을 계속 읽는 것이 아니라, 관심 이벤트를 등록하고 커널이 준비됐다고 알려준 소켓만 처리합니다. 처리 뒤에는 관심 상태를 다시 정합니다.

register 관심 이벤트 등록 읽기, 쓰기, 종료 이벤트를 fd와 함께 등록합니다.
wait 준비될 때까지 대기 select/poll/epoll_wait가 준비된 fd를 알려줍니다.
handle 가능한 만큼 처리 읽기/쓰기/accept를 수행하고 EAGAIN과 종료를 구분합니다.
update 관심 이벤트 갱신 쓸 데이터가 생기면 write 관심을 켜고, 끝나면 끕니다.
방식
알림 기준
주의점
level-triggered
조건이 계속 true면 계속 알림
단순하지만 반복 알림을 처리해야 함
edge-triggered
상태가 준비됨으로 바뀌는 순간 알림
EAGAIN까지 모두 읽지 않으면 이벤트를 놓칠 수 있음
one-shot
한 번 알림 후 재등록 필요
동시 worker 처리에서 같은 fd 중복 처리를 막음

accept loop 서버 fd가 준비되면 가능한 연결을 모두 수락한다 대기 큐가 빌 때까지 accept하고 EAGAIN에서 멈춥니다.

read loop edge-triggered에서는 버퍼를 비울 때까지 읽는다 한 번만 읽고 돌아가면 남은 데이터 알림을 놓칠 수 있습니다.

write interest 쓸 데이터가 있을 때만 쓰기 이벤트를 켠다 항상 켜 두면 준비 알림이 과도하게 반복됩니다.