NodeJS:这个代码是否会运行多核?

时间:2011-09-01 09:09:12

标签: node.js

我正在使用此节点脚本作为我的项目的“跑步者”(需要同时启动/停止三个脚本)。现在我想知道从节点进程内部生成的child_process是否会使用我的服务器所拥有的多核(我对90%有信心,但是比安慰更安全)。


    var CP = require("child_process")
      , children = [ 'server1', 'server2', 'server3' ]
      , child

    children.forEach(function(name) {

      child = CP.spawn("node", [name] )

      child.stdout.on('data', function (data) {
        process.stdout.write(data.toString());
      })

      child.stderr.on('data', function (data) {
        process.stdout.write(data.toString());
      })
    }
  });

操作系统是Ubuntu Linux。

2 个答案:

答案 0 :(得分:6)

烨。 spawn()在操作系统级别创建全新的进程。

你甚至可以使用pipe()

来简化它
var spawn = require("child_process").spawn
  , children = [ 'server1', 'server2', 'server3' ]
  , child

children.forEach(function(name) {
  child = spawn("node", [name] )

  child.stdout.pipe(process.stdout);
  child.stderr.pipe(process.stderr);

  // Catch errors (dies quite hard on first child with non-zero exit code...)
  child.on('exit', function (code) {
    if(code !== 0) {
      process.exit(code);
    }
  });
});

(还在exit添加了监听器,所以它至少会以某种方式传播错误。如果你想做什么,你可能想要跟踪它们直到最后一个进程完成,并且然后使用最大或最小的代码调用process.exit() ...)

答案 1 :(得分:0)

这绝对会使用多个核心。 Node不会,也绝不应该将子进程绑定到特定的CPU或CPU核心。