Node.js中有点混乱

时间:2013-02-05 16:01:36

标签: node.js

我对Node.js技术有一个根本的困惑。让我用这个小例子来解释。

我有这段代码

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

console.log('hello');

当我开始执行此代码时,它立即打印'hello',并在2秒后打印'world'。

现在我只想知道如果说node.js是单线程框架,那么在哪个上下文或者哪个(线程/进程)这个setTimeout函数被执行,因为唯一的单个线程正在执行剩下的代码(印刷世界)。

如果像DB命中一样进行I / O调用,node.js会使用Libeio,后者又在内部使用线程。所以它根本不是单线程的。

我是对的吗?

请建议。

由于

2 个答案:

答案 0 :(得分:2)

Node.js确实在内部使用线程 。当他们说它是“单线程”时,他们意味着javascript只在其中一个内部线程中运行。

这个线程运行一个事件循环,可以这样总结:

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

你的setTimeout函数在事件循环中创建一个计时器,触发它以便稍后调用你的回调。

答案 1 :(得分:1)

定时器在“javascript单线程”中的同一个线程中执行:Understanding javascript timers

文件系统调用发生在C / C ++级别。内部nodejs使用一个线程池。 libuv库提供了该功能,因此提供了C / C ++级别的异步调用。然后,node.js将公共api暴露给“javascript单线程”。