在node.js中,我应该fork()多少个子进程?

9
我的问题很简单,但可能需要不同的变量来回答(我猜)。
我在尝试使用Node.js,并思考如何在多核体系结构中使用它。
最新版本提供了child_process.fork()child.spawn()方法用于多进程编程。我阅读了这篇非常好(但有点过时)的文章,介绍了如何将Node.js作为大规模Comet服务器使用。现在,Node.js提供了多进程编程,我真的不知道要生成多少个进程才能处理大量的请求(假设我的服务器只运行在一台机器上)。是否有一种方法可以选择数量最好(或至少是一个好的)的子进程来完成相同的工作?
如果有任何与入门相关的链接,将不胜感激。
谢谢!
2个回答

15

Node.js官方文档有一个如何使用集群(cluster)的示例:

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('death', function(worker) {
    console.log('worker ' + worker.pid + ' died');
  });
} else {
  // Worker processes have a http server.
  http.Server(function(req, res) {
    res.writeHead(200);
    res.end("hello world\n");
  }).listen(8000);
}

如您在上述代码中所见,您应该使用与您拥有的 CPU 数量相同的进程,以使所有核心同时工作(在处理器核心之间分配工作)。


2
如果您更新了答案并解释为什么要使用与 CPU 数量相同的 fork,我会给您一个 +1。如果我没有多核系统怎么办?我只应该 fork 1 吗?如果从节点使用域退出并且我只有 1 个 CPU,会发生什么情况?如果我使用的 CPU 总数超过总数,会有什么影响?是否存在某些情况,我想要或不想要使用所有可用的 CPU? - Endless
@Endless,你正在寻找的答案在这里得到了很好的解释:https://dev59.com/EGDVa4cB1Zd3GeqPdGl6 - bobbytables

5
在Node.js示例中,他们希望每个核心只运行一个进程。每个核心上的工作进程数量没有技术限制,因此只要系统能够处理,就可以运行尽可能多的工作进程。
然而,每个核心运行多个进程并不能提高应用程序的性能。
希望这有所帮助!

Node会在不同的核心上运行每个分支(最多到最大核心数)吗? - Steven Johnston
如果您有两个核心,那么您将有两个分支,并且在每个分支中都会有一个节点应用程序。 - Nam Nguyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接