리액터 패턴

nodejs-new-pantone-black.svg

관찰대상인 리소스에서 새로운 이벤트를 사용할 수 있을 때 까지, I/O를 블로킹하여 처리한다. 각 이벤트를 핸들러에 전달함으로써 반응한다.

리액터패턴.png

  1. 애플리케이션은 이벤트 디멀티플렉터에 새로운 요청 I/O를 전달
    1. 이 때, 요청을 전달하는 것은 논블로킹 호출, 애플리케이션은 작업이 완료되었을 때, 호출될 핸들러(콜백함수)를 명시
  2. 이벤트 디멀티플렉터는 요청에 해당하는 이벤트 작업들을 이벤트큐에 집어넣는다.
  3. 이벤트루프가 이벤트큐를 순회
  4. 각 이벤트와 관련된 핸들러(콜백함수)가 호출됨
  5. 핸들러의 실행이 완료되면, 제어권을 다시 이벤트 루프에게 돌려줌(5a), 핸들러 실행 중, 다른 비동기 작업을 요청할 수 있음(5b). 즉, 이벤트 디멀티플렉서에 새로운 이벤트를 추가하는 것.
  6. 이벤트 루프는 이벤트 디멀티플렉서에서 블로킹되며, 새로운 이벤트가 있을 경우, 이 과정이 다시 트리거 됨.

멀티플렉서(multiplexer) 또는 mux는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치이다.[1]

전자 멀티플렉서는 여러 신호가 이를테면 입력 신호 당 하나의 장치를 보유하지 않고 아날로그-디지털 변환회로(A/D 변환기)나 하나의 통신선 등 하나의 장치나 자원을 공유할 수 있게 만들어준다.

이와 반대로, 디멀티플렉서(demultiplexer, demux)는 하나의 입력 신호를 받아서 수많은 데이터 출력선 중 하나를 선택하는 장치를 말하며 단일 입력으로 연결된다. 수신을 받는 쪽에서는 멀티플렉서라는 용어가 보완 관계인 디멀티플렉서와 번갈아가며 사용되기도 한다.[1]

비동기적 동작

애플리케이션은 특정 시점에 비동기적으로 리소스에 접근하고싶다는 요청을 보낸다. 동시에, 요청이 완료되었을 경우 호출할 핸들러(콜백하수)를 제공한다.

Node.js I/O 엔진

Libuv는 이벤트 디멀티플렉싱을 위해 구현된 논블로킹 동작을 표준화하기 위한 C언어 라이브러리이다.

Node.js의 기본 구성