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

时间:2015-12-28 12:49:37

标签: javascript node.js multiprocess

对于典型的C程序,我们这样做是为了创建一个新的过程:

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语句中创建子进程?为什么子进程不跳过else块?

谢谢!

1 个答案:

答案 0 :(得分:3)

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

在C fork()中创建当前进程的精确副本(fork()返回值除外),然后从调用fork()时继续执行这两个进程。< / p>

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