- 이벤트 루프가 디자인 패턴으로 자리잡은 경우
- ‘입출력 멀티플렉싱 이용해 논블로킹 입출력을 다루고 적절한 콜백으로 데이터를 처리하는 단일 스레드의 이벤트 반복문’ → 리액터 패턴 구현과마찬가지
- 성립 요소
- 이벤트 소스
- 이벤트 핸들러
- 동기 이벤트 디멀티플렉서
- 리액터 구조
- 이벤트 소스
- 이벤트 생성하는 요소
- 이벤트 될 수 있는것은
- 파일
- 소켓
- 타이머
- 동기화 객체 등
- 이벤트 핸들러
- 이벤트 소스에서 들어온 요청을 처리하는 콜백 함수
- 동기 이벤트 디멀티플렉서
- 운영체제가 제공하는 select 같은 이벤트 알림 시스템을 어렵게 부르는 말
- 다양한 대상에 이벤트가 발생하는 것을 탐지해 알려주는 역할
- 리액터
- 다른말로 이벤트 반복문
- 과정 전체를 관장
- 이벤트에 반응(react)
- select가 사용하는 입출력 자원의 목록을 반환하면 그에 대한하는 콜백을 호출하는 식
요약
리액터 패턴 구현한 애플리케이션은 이벤트 소스와 애플리케이션의 관심 대상인 이벤트를 등록함. 그리고 이벤트의 종류마다 이를 처리할 이벤트 핸들러, 즉 콜백도 등록. 동기 이벤트 디멀티플렉서는 이벤트가 발생하기를 기다렸다가 리액터에 알린다. 리액터는 발생한 이벤트를 적합한 이벤트 핸들러에 맡겨 처리함
지금 설명한 구조는 다양한 코어 라이브러리와 프레임웍에 채택됨. libevent 같은거. Node.js, Java NIO, Ver.x, NGINX 등 저수준의 입출력 구현에 쓰인 libuv(libeio,libev,c-ares, iocp 를 추상화한것)는 이벤트 반복문을 사용한 논블로킹 모델로 높은 수누의 동시성 달성