NETWORK · CH11

이벤트 루프의 원형

이벤트 루프는 준비된 I/O 이벤트를 기다렸다가 연결된 콜백을 호출하는 반복 구조입니다.

핵심 분해

실행 루프
등록소켓과 콜백을 selector에 등록합니다.
대기select/epoll/kqueue가 준비된 이벤트를 기다립니다.
디스패치이벤트에 연결된 콜백을 호출합니다.
반복서버가 살아 있는 동안 같은 과정을 계속 반복합니다.

흐름으로 읽기

flow
registerfd+callback
wait준비 이벤트
dispatch콜백 실행
서버 관점

Node.js, Nginx, Redis는 모두 이 패턴으로 많은 연결을 적은 실행 자원으로 다룹니다.

while True:
  events = selector.select()
  for key, mask in events:
    key.data(key.fileobj)