NodeJS真的是单线程吗?

时间:2011-08-10 21:30:23

标签: multithreading architecture node.js

Node.js通过将基于事件的模型置于其核心,使用事件循环而不是线程来解决“每个连接一个线程问题”。 所有昂贵的I / O操作总是与启动操作完成时执行的回调异步执行。

观察如果发生任何操作,则由epoll()等多路复用机制处理。

我的问题现在是:

  • 为什么NodeJS在使用阻塞系统调用时不会阻塞 选择/ epoll的/ kqueue的?

  • 或者根本不是NodeJS Single Threaded,所以第二个Thread是
    使用select / epoll / kqueue观察所有I / O操作是否必要?

4 个答案:

答案 0 :(得分:108)

NodeJS 已经(来自website的第二行),而不是单线程。它在内部处理执行select / epoll / kqueue处理所需的线程,而无需用户明确地管理它,但这并不意味着它内部没有线程使用。

答案 1 :(得分:8)

没有

当启动I / O操作时,它们被委派给 libuv ,后者使用自己的(多线程,异步)环境管理请求。 libuv宣布完成I / O操作,允许等待此事件的任何回调重新引入主V8线程以供执行。

V8 - >委托I / O( libuv ) - >线程池 - >多线程异步

答案 2 :(得分:0)

JavaScript是单线程的,事件模型也是如此。但是Node堆栈不是单线程的。

Node利用V8引擎实现并发。

答案 3 :(得分:0)

总体上没有Nodejs不是单线程的,但是Node-Event循环(nodeJS大量使用的)是单线程的

某些节点框架/ Std Lib不是单线程的