Node.js 线程池

Node.js threadpool

我已经阅读了很多关于 Node.js 的工作原理以及为什么在处理许多 IO 请求时它可能是更好的选择,但是..主要优点是 node.js 是单线程模型由一个主线程(事件循环)组成,它在后台为每个 IO 操作使用一个工作线程,因此它将始终在那里为更多的请求提供服务。与常规的请求-响应模型相比为每个请求分配一个线程,当线程 bool 中没有更多线程时,新请求应该在队列中等待,直到某个线程结束。

因此,在知道线程池的线程数量有限的情况下,不能 Node.js 在为每个 IO 操作分配一个 worker 时遇到同样的问题。

谢谢

node.js 根本不对传入的网络请求使用线程。传入的请求由底层套接字基础结构排队,当 node.js 完成先前的操作时,通过内部 node.js 事件队列为排队的请求提供服务,然后进入事件队列以进行下一步操作。

一次可以处理多少传入网络请求的限制很可能取决于底层 OS/TCP 堆栈以及在拒绝下一个传入连接之前它将排队的请求数。 node.js 中的 HTTP 库在向同一主机发出大量出站请求时确实做了一些连接池(为了提高性能),但这与传入请求不同,如果连接池是可以绕过的不可取。

node.js 的其他部分确实使用内部线程池来使异步行为起作用(例如磁盘 I/O)。如果您尝试 运行 比线程池中的线程更多的异步磁盘操作,则线程池会将请求排队以在线程释放时启动 运行ning。由于请求的接口是异步的,它可以只将事件添加到内部队列,然后在有可用线程为其分配时为其提供服务。