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

我在网上查了一下,我似乎find的所有答案都与“在多核CPU上运行如何受益”的问题有关。

但。 如果你只有一个核心的机器,你只能在任何时候运行一个进程。 (我正在考虑这里的任务调度)。 而节点使用单线程模型。

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

我的问题是否有任何情况下在一个核心中运行多个节点进程是有意义的?

是的,有一些情况。 见下面的细节。

如果这个过程是一个在端口上监听的Web服务器,那么只有一个进程可以监听,这个工作怎么可能呢?

node.js集群模块创build一个场景,其中在所需端口上有一个侦听器,但传入的请求在所有集群进程之间共享。 更多详细信息…

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

至于你是否可以从比核心更多的进程中受益,答案是这取决于你正在寻找什么types的好处。 如果你有一个写好所有asynchronousI / O的服务器,那么添加比核心更多的进程可能不会提高你的整体吞吐量(按照服务器每秒可以处理的请求来衡量)。

但是,如果您的请求中包含CPU繁重的处理,则在同时发生的请求之间进行更多的处理可能会提供更公平的调度,因为操作系统将在每个进程中“共享”CPU。 这可能会稍微降低整体吞吐量(因为任务在进程之间切换CPU的额外开销),但是当多个请求一起处理时,它可能会使得请求处理更多。

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

所以,这实际上取决于你想要优化什么,以及你的情况是什么。