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

Mar*_*ari 5 webserver processing-efficiency node.js

我在网上查了一下,我似乎找到的所有答案都与"Node如何从多核CPU运行中受益?"的问题有关.

但.如果您的计算机只有一个核心,则您只能在任何给定时间运行一个进程.(我在这里考虑任务安排).节点使用单线程模型.

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

jfr*_*d00 11

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

是的,有一些场景.详情见下文.

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

node.js集群模块创建一个场景,其中所需端口上有一个侦听器,但传入请求在所有集群进程之间共享.更多细节要遵循......

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

至于你是否可以从比核心更多的流程中受益,答案是它取决于你正在寻找什么类型的利益.如果您具有包含所有异步I/O的正确编写的服务器,则添加比核心更多的进程可能无法提高整体吞吐量(通过服务器可以处理的每秒请求数来衡量).

但是,如果您的请求中有任何CPU繁重的处理,那么在同时请求之间进行更多进程可能会提供更公平的调度,因为操作系统将在您的每个进程之间"共享"CPU.这可能会略微降低整体吞吐量(因为任务在进程之间切换CPU的额外开销),但是当有多个请求一起处理时,它可以使请求处理更加均匀.

如果您的请求没有太多的CPU处理并且实际上只是在等待I/O大部分时间,那么添加更多进程而不是内核可能没什么好处.

所以,这实际上取决于您想要优化的内容以及您的情况.