假设我有一个“经理人”的过程,它会让“工人”感到兴奋:
child = childProcess.fork("./worker", [], {execArgv: args} );
child.send(startSignal);
当经理刚刚......管理时,子流程将进行繁重的工作。
这些子进程是否会被锁定使用管理器正在使用的处理器核心,或者如果管理器核心太忙,操作系统是否可以将它们分配给其他处理器核心?
我意识到这可能是特定于操作系统的。我正在开发Ubuntu但可以将其部署到任何Linux(可能是CoreOS)。对于后人来说,Windows和Mac也值得讨论。
答案 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?)的,所以我假设内核的行为方式相同。