为了账号安全,请及时绑定邮箱和手机立即绑定

NodeJS真的是单线程的吗?

NodeJS真的是单线程的吗?

炎炎设计 2019-12-25 15:53:40
Node.js通过使用基于事件的模型而不是线程,将基于事件的模型置于其核心,从而解决了“每个连接一个线程的问题”。所有昂贵的I / O操作始终与在启动操作完成时执行的回调异步执行。如果发生任何操作,则由epoll()之类的多路复用机制处理该观察。我的问题是:为什么在使用阻塞系统调用select / epoll / kqueue时NodeJS不阻塞?还是根本不是NodeJS单线程,因此需要第二个线程来观察具有select / epoll / kqueue的所有I / O操作?
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-12-25
?
绝地无双

TA贡献1946条经验 获得超4个赞

没有。

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

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


查看完整回答
反对 回复 2019-12-25
  • 3 回答
  • 0 关注
  • 743 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信