为什么node.js可以在if语句中调用clustet.fork()?

对于一个典型的C程序,我们做这样的事情来创build一个新的过程:

int main(void) { pid_t childPID; childPID = fork(); if(childPID >0){ do something } else if(childPID == 0){ do something } else { do something } } 

但是在一个node.js程序中,fork通常在if语句中完成:

 var cluster = require('cluster'); if (cluster.isMaster) { do something cluster.fork() } else{ do something for the child process } 

为什么我们可以在Node.js的if语句中创buildsubprocess? 为什么subprocess不跳过else块?

谢谢!

这是因为C fork()和node.js cluster.fork()以不同的方式工作。

在C中, fork()创build一个当前进程的确切副本( fork()返回的值除外),然后继续执行fork()被调用时的两个进程。

在node.js中, cluster.fork()使用相同的.js入口点生成新的工作者node.js进程,但使用的环境稍有不同。 它还build立了IPC通道,用于在主进程和其工作者之间传递消息/文件描述符。