为什么 "Hello world" 打印了 2 次?
Why is the "Hello world" printed 2 times?
为什么程序打印 "Hello World" 2 次而不是只打印 1 次? console.log 在 cluster.fork() 之前执行。
import * as cluster from "cluster";
console.log("Hello World");
if (cluster.isMaster) {
const worker = cluster.fork();
worker.disconnect();
}
下面的 c 程序只打印 "Hello World" 1 次
#include <unistd.h>
#include <stdio.h>
int main(void)
{
printf("HelloWorld/n");
fork();
return 0;
}
cluster.fork
方法(通过 child_process.fork
, which it calls)不会像在 UNIX 中那样执行 fork
系统调用。它 确实 创建一个新的子进程,就像 fork 一样,但是这个新的子进程从一个全新的解释器实例开始,并且那个新的解释器从头开始执行脚本。您看到 console.log
在父进程中执行一次,在子进程中执行一次。
child_process.fork
的文档简要提到了这一点...
Unlike the fork(2) POSIX system call, child_process.fork() does not clone the current process.
...但我仍然会说这个名字令人困惑。
要解决此问题,您可能需要将初始化逻辑(在本例中为 console.log
调用)移动到 if (cluster.isMaster)
块中。
cluster.fork 创建一个新的子进程并执行相同的代码。您应该检查该进程是否是主进程,然后在 if 块或 else 块中执行您想要的代码。
import * as cluster from "cluster";
if (cluster.isMaster) {
console.log("Hello World from master");
const worker = cluster.fork();
worker.disconnect();
} else {
console.log("Hello World from others");
}
为什么程序打印 "Hello World" 2 次而不是只打印 1 次? console.log 在 cluster.fork() 之前执行。
import * as cluster from "cluster";
console.log("Hello World");
if (cluster.isMaster) {
const worker = cluster.fork();
worker.disconnect();
}
下面的 c 程序只打印 "Hello World" 1 次
#include <unistd.h>
#include <stdio.h>
int main(void)
{
printf("HelloWorld/n");
fork();
return 0;
}
cluster.fork
方法(通过 child_process.fork
, which it calls)不会像在 UNIX 中那样执行 fork
系统调用。它 确实 创建一个新的子进程,就像 fork 一样,但是这个新的子进程从一个全新的解释器实例开始,并且那个新的解释器从头开始执行脚本。您看到 console.log
在父进程中执行一次,在子进程中执行一次。
child_process.fork
的文档简要提到了这一点...
Unlike the fork(2) POSIX system call, child_process.fork() does not clone the current process.
...但我仍然会说这个名字令人困惑。
要解决此问题,您可能需要将初始化逻辑(在本例中为 console.log
调用)移动到 if (cluster.isMaster)
块中。
cluster.fork 创建一个新的子进程并执行相同的代码。您应该检查该进程是否是主进程,然后在 if 块或 else 块中执行您想要的代码。
import * as cluster from "cluster";
if (cluster.isMaster) {
console.log("Hello World from master");
const worker = cluster.fork();
worker.disconnect();
} else {
console.log("Hello World from others");
}