但.如果您的计算机只有一个核心,则您只能在任何给定时间运行一个进程. (我在这里考虑任务安排).节点使用单线程模型.
我的问题:在任何情况下,在一个核心中运行多个节点进程是否有意义?如果进程是一个侦听端口的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繁重的处理,那么在同时请求之间进行更多进程可能会提供更公平的调度,因为操作系统将在您的每个进程之间“共享”CPU.这可能会略微降低整体吞吐量(因为任务在进程之间切换CPU的额外开销),但是当有多个请求一起处理时,它可以使请求处理更加均匀.
如果您的请求没有太多的CPU处理并且实际上只是在等待I / O大部分时间,那么添加更多进程而不是内核可能没什么好处.
所以,这实际上取决于您想要优化的内容以及您的情况.