NodeJS真的是单线程的吗?

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

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

我的问题是:

  • 为什么在使用阻塞系统调用select / epoll / kqueue时NodeJS不阻塞?

  • 还是根本不是NodeJS单线程,因此需要第二个线程
    来观察具有select / epoll / kqueue的所有I / O操作?


炎炎设计
浏览 744回答 3
3回答

梦里花落0921

NodeJS是事件事件(来自网站的第二行),不是单线程的。它在内部处理执行选择/ epoll / kqueue处理所需的线程,而无需用户明确地进行管理,但这并不意味着其中没有线程使用情况。

绝地无双

没有。启动I / O操作时,它们将委派给libuv,后者使用其自己的(多线程,异步)环境管理请求。libuv宣布I / O操作完成,从而允许将等待此事件的所有回调重新引入主V8线程以执行。V8- >委托I / O(libuv)->线程池->多线程异步
打开App,查看更多内容
随时随地看视频慕课网APP