Node.js集群-每个核心1个工作线程会减慢主线程的速度吗



因此,当涉及到node.js集群时,我有点担心我在网上找到的示例代码,例如:

if (cluster.isMaster)
{
console.log('Initializing...');
// Fork workers.
for (let i = 0; i < os.cpus().length; i++)
{
cluster.fork();
}
}
else
{
doWork();
}

对于具有4个物理核心的系统,此代码将为每个核心分叉4次。这意味着我们最终得到的是主线程+4个工作线程==5个线程。

这似乎比我们能应付的多了一个工人!为了确保主线程正常运行,代码不应该是:os.cpus().length - 1,这样我们就可以为主线程留下一个可用的核心吗?

出于我的目的

我正在运行一个UDP服务器,我希望一半的工作人员处理传入的数据包,另一半在setInterval函数内每秒发送大量的数据包。

我不希望主线程(它正在进行负载平衡)和处理传入数据包的工作线程之间有任何延迟,所以我想确保主线程以100%的速度工作。

在这种情况下,我会在forking for循环中使用os.cpus().length - 1,还是使用os.cpus().length

提前感谢!

编辑:我注意到有一个问题与我的问题类似,答案解释说主线程通常在分发上花费的时间很少,所以留下一个可用的核心可能会让那个核心闲置。我相信TCP/IP是这样的,但在我的情况下,我预计每个"连接"到我的服务器的客户端每秒大约有30-60个数据包,所以会有源源不断的数据包流入,这可能与TCP/IP流量不同。

我认为主线程只是一个负载均衡器,它只是将请求引导到每个派生/分叉的工作线程。因此,您的应用程序的每个核心都有一个线程在运行+一个线程来管理请求。如果你有os.cpus().length-1,你将无法利用所有的cpu核心。

最新更新