对不起我不认为问题的标题特别好,我努力为我提出的多个问题创建一个合适的标题。
据我所知,每个cpu核心有一个节点进程是使用node.js时充分利用多核cpu的最佳方式。我现在明白,经过研究,由于cpu必须在多个进程之间进行上下文切换这一事实,每个核心运行多个是低效的。为什么每当我看到如何在node.js中使用内置集群模块发布代码时,主工作者就会创建一些等于内核数量的工作者,因为这意味着你将在8上有9个进程核心机器(1个主进程和8个工作进程)?这是因为主进程通常只是为了重新启动工作进程,如果它们崩溃或结束,因此它与其他节点进程共享cpu核心无关紧要吗?
如果我在作为服务器控制面板的主节点进程上运行本地托管的网页,那会没关系吗?在单独的工作人员上运行此网页并让主进程只处理重生工作者会更好吗?或者我应该有7名工人而不是8名工人,所以主工人有一个完整的CPU核心?
答案 0 :(得分:1)
在群集模块中,有两种传入连接的分发方法。在循环方法(除Windows之外的所有平台上的默认方法)中,主进程接收传入连接,然后将其分发给工作进程。假设大多数时候接受连接并分发连接的工作比实际工作进程正在进行的工作要小得多。因此,如果你有8个内核并拥有1个主服务器和7个工作服务器,那么很多时候1个主进程将处于空闲状态,因此一个内核将处于空闲状态。因此,通过实际使用1个主服务器和8个工作服务器,您可以从CPU中获得更多功能,并让操作系统在所有工作人员忙碌并且发生新的传入连接时进行切换。理论上说,这比在大多数时间让一个核心闲置更有效。
在群集模块使用的其他调度算法中,每个子进程直接侦听传入连接,主进程再次执行此操作的次数更少,创建尽可能多的工作符是有意义的。