【发布时间】:2019-01-07 02:07:59
【问题描述】:
所以我有点担心我在网上找到的关于 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% 的速度工作。
在这种情况下,我会在我的 fork 循环中使用os.cpus().length - 1,还是使用os.cpus().length?
提前致谢!
编辑:我注意到有一个与我的问题类似的问题,答案解释说主线程通常在分发上花费的时间很少,因此保留一个可用内核可能会使该内核空闲。我相信这对于 TCP/IP 来说是正确的,但在我的情况下,我预计每个“连接”到我的服务器的客户端每秒大约有 30-60 个数据包,因此将会有源源不断的数据包流入,这可能与 TCP/IP 流量的外观不同。
【问题讨论】:
-
如何断言一个线程占用一个核心?
标签: node.js multithreading cluster-computing