节点:一个核心,多个进程

Node: one core, many processes

我在网上查了一下,似乎找到的都是与 "how does Node benefit from running in a multi core cpu?"

问题相关的答案

但是。如果您的机器只有一个内核,那么您在任何给定时间都只能 运行 宁一个进程。 (我在这里考虑任务调度)。而node使用的是单线程模型。

我的问题:在任何情况下 运行 一个核心中的多个节点进程是否有意义?如果该进程是一个侦听端口的 Web 服务器,那么在只有一个进程可以侦听的情况下,它如何工作?

My question: is there any scenario in which it makes sense to run multiple node processes in one core?

是的,有一些场景。请参阅下面的详细信息。

And if the process is a web server that listens on a port, how can this ever work given that only one process can listen?

node.js 集群模块创建了一种场景,其中在所需端口上有一个侦听器,但传入请求在所有集群进程之间共享。更多详情请关注...

您可以使用集群模块 运行 多个进程,这些进程都配置为处理同一端口上的传入请求。如果你想知道传入的请求是如何在不同的集群进程之间共享的,你可以阅读 this blog post 中的解释。简而言之,最终在所需端口上只有一个侦听器,并且传入请求在各种集群进程之间共享。

至于您是否可以从比内核更多的进程中获益,答案是这取决于您正在寻找什么类型的收益。如果你有一个正确编写的服务器,所有异步 I/O,那么添加比核心更多的进程可能不会提高你的整体吞吐量(以你的服务器每秒可以处理的请求来衡量)。

但是,如果您的请求中有任何 CPU 繁重的处理,那么多一些进程可能会在同时请求之间提供更公平的调度,因为 OS 将 "share"每个进程中的 CPU。这可能会略微降低整体吞吐量(因为在进程之间切换 CPU 的任务会增加开销),但即使有多个请求要一起处理,它也可能会使请求处理更多。

如果您的请求没有太多 CPU 繁重的处理,并且大部分时间实际上只是在等待 I/O,那么添加比核心更多的进程可能没有任何好处。

所以,这真的取决于你想优化什么以及你的情况。