如果我的节点进程创建子进程,那些子进程是否能够利用其他处理器核心?

时间:2014-08-07 18:57:11

标签: node.js multicore

假设我有一个“经理人”的过程,它会让“工人”感到兴奋:

  child = childProcess.fork("./worker", [], {execArgv: args} );
  child.send(startSignal);

当经理刚刚......管理时,子流程将进行繁重的工作。

这些子进程是否会被锁定使用管理器正在使用的处理器核心,或者如果管理器核心太忙,操作系统是否可以将它们分配给其他处理器核心?

我意识到这可能是特定于操作系统的。我正在开发Ubuntu但可以将其部署到任何Linux(可能是CoreOS)。对于后人来说,Windows和Mac也值得讨论。

1 个答案:

答案 0 :(得分:2)

仅限Linux回答,简短回答

答案很长:在查看Node.js docs(最后一页)时: -

  

这是产生Node的spawn()功能的特例   流程。除了拥有正常的所有方法   在ChildProcess实例中,返回的对象具有通信通道   内置。有关详细信息,请参阅child.send(message,[sendHandle])。

     

这些子节点仍然是V8的全新实例。至少假设   每个新节点启动30ms,内存10mb。也就是说,你做不到   创造了数千个。

由于它是一个新的V8实例,内核将对线程进行切片并对任务进行多任务处理。很久以前,Linux操作系统一直在使用多核进行多任务处理(来自内核2.4)。因此,您只想生成与CPU一样多的子进程。使用require('os').cpus().length确定CPU数量。

Mac是基于unix(Next?)的,所以我假设内核的行为方式相同。