【问题标题】:How many child_processes should I fork() in node.js?我应该在 node.js 中 fork() 多少个 child_processes?
【发布时间】:2011-12-23 02:32:04
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: node.js concurrency fork comet


    【解决方案1】:

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

    【讨论】:

    • 如果您更新答案并解释为什么使用与 CPU 数量一样多的分叉,我会给您 +1。如果我没有多核系统怎么办?我应该只分叉1吗?如果从服务器失败并使用域退出并且我只有 1 个 cpu 怎么办?如果我使用更多的cpus会有什么影响?是否有任何我愿意和不想使用所有可用 CPU 的情况?
    • @Endless,您正在寻找的答案在这里得到了很好的解释:stackoverflow.com/questions/9275654/…
    【解决方案2】:

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

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

    希望对你有帮助!

    【讨论】:

    • Node 会在不同的核心上运行每个分叉(最多达到最大核心数)吗?
    • 例如,如果您有 2 个核心,您将有 2 个分叉,并且在每个分叉中,将有 1 个节点应用程序。
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多