一尘不染

node.js如何工作?

node.js

我不了解关于nodejs的几件事。每个信息来源都说,由于缺少线程锁定和上下文切换,node.js比标准线程化Web服务器更具可伸缩性,但是我想知道,如果node.js不使用线程,它将如何并行处理并发请求?事件I
/ O模型意味着什么?

非常感谢您的帮助。谢谢


阅读 229

收藏
2020-07-07

共1个答案

一尘不染

节点完全是事件驱动的。基本上,服务器由一个线程处理一个事件接着另一个事件组成。

一个新的请求进入是一种事件。服务器开始处理它,并且当发生阻塞的IO操作时,它不会等到完成后才注册回调函数。然后,服务器立即开始处理另一个事件(可能是另一个请求)。IO操作完成后,这是另一种事件,服务器将在有时间时通过执行回调来处理它(即继续处理请求)。

因此,服务器无需创建其他线程或在线程之间切换,这意味着其开销很小。如果要充分利用多个硬件内核,只需启动多个node.js实例

更新 在最低级别(C
++代码,而不是Javascript),node.js中实际上有多个线程:有一个IO工作器池,其工作是接收IO中断并将相应的事件放入要处理的队列中通过主线程。这样可以防止主线程被中断。

2020-07-07