'event loop'에 해당되는 글 1건

  1. 2010.10.25 C++ Addon with Node.js (4)

C++ Addon with Node.js

Node.js 2010.10.25 20:58

Node 는 V8 자바스크립트 엔진을 기반으로 동작하는 서버 사이드 자바스크립트로 V8 엔진과 유기적으로 동작할 수 있는 C/C++로 작성된 추가기능을 제공합니다.


이것은 구조적으로 추가 기능과 동적으로 공유 객체를 연결하고 C, C++ 라이브러리를 위한 연결 지점을 제공합니다.


V8 엔진도 C++ 로 작성된 라이브러리로 자바스크립트의 오브젝트를 만들거나 함수 호출등의 인터페이스에 사용됩니다.  문서화는 대부분 v8.h 헤더파일에 기록되어 있어 추가기능을 만들기 위해서는 자주 참고하게 될 것입니다. (Node의 소스 트리중 deps/v8/include/v8.h를 참고하세요.)


Node 의 동작에 있어서 가장 중요한 역할을 하는 두가지 라이브러리가 있습니다.  그것은 libev 인터페이스와, libeio 쓰레드 풀 라이브러리 입니다.


이 문서를 통해 Node.js 의 Addon 의 구조와 원리를 이해하고 직접 Native Extension 개발을 습득해봅니다.





Node는 크게 자바스크립트 언어 레이어와 C 언어 레이어로 나뉜다.  C 언어 레이어는 C++로 개발된 구글의 V8  자바스크립트 엔진은 쓰레드 풀 라이브러리인 libeio 와 이벤트 루프 라이브러리인 libev 로 시스템에서 자바스크립트이 가능하도록 하는 코어 역할을 한다.


Node binding 레이어는 Blocking POSIX 시스템을 비동기적으로 호출하기 위한 대부분의 래퍼들을 구현해 놓았다.  이것들은 Node 저장소에 있는 소스 중 src/*.cc 에 포함되어 있고 Node standard library 의 대부분이 래퍼들과 동작하게 된다.


Node standard library 레이어는 Node binding 에 구현해 놓은 래퍼들이 제공하는 API를 이용해 자바스크립트에서 효율적이고 손쉽게 시스템상에서 I/O 프로그래밍을 할 수 있도록 지원하는 서버 사이드 라이브러리 이다.


Writing Native Extension for Node


Libraries

  1. C event loop 라이브러리 (libev)
    1. http://cvs.schmorp.de/libev/ev.html
    2. 파일 디스크립터가 읽을 수 있게 되고, 타이머를 기다릴 때 혹은 신호를 받기를 기다릴때 등에서 libev 인터페이스가 필요하다.
    3. 모든 I/O 작업을 할때 libev 인터페이스는 꼭 필요하다.
  2. C thread pool 라이브러리 (libeio)
    1. http://pod.tst.eu/http://cvs.schmorp.de/libeio/eio.pod
    2. 블럭킹 POSIX 시스템을 비동기적으로 실행하는데 사용한다.
    3. Non-blocking 프로그램을 가능하게 한다.

좀더 자세한 사항은 PDF를 다운로드 받아서 보세요. :)

신고

'Node.js' 카테고리의 다른 글

C++ Addon with Node.js  (4) 2010.10.25
Posted by Rhio.kim