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

Art*_*Ale 9 concurrency fork comet node.js

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

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

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

任何指向起始指南的链接都将非常感激.

谢谢

ale*_*lex 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);
}
Run Code Online (Sandbox Code Playgroud)

正如您在上面的代码中所看到的,您应该使用与您拥有的cpu数量一样多的分支,以便所有内核同时工作(在处理器核心之间分配工作).

  • 如果您更新了答案并解释为什么使用与cpus数量一样多的叉子,我会给你+1.如果我没有多核系统怎么办?我应该只分叉1吗?如果奴隶出现故障并退出使用域,我只有1个CPU?如果我使用的总数超过cpus会有什么影响?是否有任何Senario我会,并不想使用所有可用的cpu? (2认同)

Nam*_*yen 5

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

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

希望能帮助到你!