Node.js 集群 - 每个内核 1 个 worker 会减慢主线程?

Node.js clustering - 1 worker per core slows down main thread?

所以我有点担心我在网上找到的关于 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% 的速度工作。

在那种情况下,我会在 for-loop 分支中使用 os.cpus().length - 1,还是会使用 os.cpus().length

提前致谢!

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

我认为主线程只是一个负载平衡器,只是将请求定向到每个 spawned/forked 工作线程。因此,您的应用程序的每个核心都有一个线程 运行 + 一个线程来管理请求。如果你有 os.cpus().length - 1 你将不会利用你所有的 cpu 核心。