在Node.js中有点混乱

我在Node.js技术中有一个基本的困惑。 让我来解释一下这个小例子。

我有这段代码

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

当我开始执行这个代码时,它直接打印“hello”,2秒后打印出“world”。

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

在I / O调用如DB命中的情况下,node.js使用Libeio,而Libejo则在内部使用线程。 所以它不是单线程的。

我对吗??

请build议。

谢谢

Node.js确实在内部使用线程。 当他们说这是“单线程”,他们的意思是JavaScript只在这些内部线程之一运行。

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

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

你的setTimeout函数在事件循环中创build一个定时器,触发它稍后调用你的callback函数。

定时器在“javascript单线程”中的相同线程中执行: 了解javascript定时器 。

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