我应该在node.js中fork()多少个child_processes?

时间:2011-11-06 15:26:18

标签: node.js concurrency fork comet

我的问题很简单。但是,它可能需要回答不同的变量(我猜)

我正在使用node.js,我正在考虑如何在多核架构中使用它。

最新版本为多进程编程提供了child_process.fork()child.spawn()方法。我已经阅读了关于将Node.js用作大型Comet服务器的this非常好(但已过时)的文章。现在,nodejs提供了多进程编程,我真的不知道应该为生成大量请求而生成多少进程(假设我的服务器只在一台机器上运行)。有没有办法选择'best'(或至少一个好的)子进程执行相同的工作?

非常感谢任何有关入门指南的链接。

谢谢

2 个答案:

答案 0 :(得分:10)

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

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数量一样多的分支,以便所有内核同时工作(在处理器核心之间分配工作)。

答案 1 :(得分:5)

在Node.js示例中,他们希望每个核心仅运行一个进程。每个核心的工作人员数量没有技术限制,因此只要您的系统能够处理,您就可以尽可能多地运行。

但是,每个核心运行多个进程并不会提高应用程序的性能。

希望它有所帮助!