2013-02-05 2 views
1

저는 Node.js 기술에 근본적인 혼란이 있습니다. 이 작은 예를 들어 설명해 드리겠습니다. 이 코드를 실행하기 시작하면Node.js에 약간의 혼란이 있습니다.

가 나는 immedietely 인쇄는 '안녕하세요', 2 초 후에는 '세계'를 인쇄, 코드

setTimeout(function(){ 
    console.log('world'); 
}, 2000); 

console.log('hello'); 

이 조각이있다.

이제 node.js가 단일 스레드 프레임 워크라고 말하면서, 단일 스레드가 나머지 코드를 실행하기 때문에이 setTimeout 함수가 실행되는 컨텍스트 또는 위치 (스레드/프로세스)가 무엇인지 알고 싶습니다. (인쇄 세계).

DB 히트와 같은 I/O 호출의 경우, node.js는 내부적으로 스레드를 사용하는 Libeio를 사용합니다. 그래서 그것은 단일 스레드가 아닙니다.

내가 맞습니까 ??

좋습니다.

감사

+0

http://stackoverflow.com/questions/7018093/nodejs-really-single-threaded – Jack

답변

2

Node.js를 실제로 스레드 내부적으로를 사용 않습니다. 그들이 "단일 스레드"라고 말하면 자바 스크립트는 내부 스레드 중 하나에서만 실행된다는 의미입니다.

while true 
    foreach events as event 
     call event js callback 
    endforeach 
endwhile 

당신의 setTimeout 함수가 나중에 콜백을 호출하는 트리거, 이벤트 루프에서 타이머를 만듭니다

이 스레드는이 같이 요약 될 수있는 이벤트 루프를 실행합니다.

1

타이머는 동일한 스레드의 "javascript single thread": Understanding javascript timers에서 실행됩니다.

파일 시스템 호출은 C/C++ 수준에서 발생합니다. 내부 노드는 스레드 풀을 사용합니다. libuv 라이브러리는 해당 기능을 제공하므로 C/C++ 수준에서 비동기 호출을 제공합니다. 그런 다음 node.js는 공용 API를 "javascript single thread"에 노출합니다.

관련 문제