Javascript 为什么“Hello world”要打印两次?
为什么程序打印Hello World两次而不是一次?console.log在cluster.fork之前执行Javascript 为什么“Hello world”要打印两次?,javascript,node.js,multiprocessing,fork,node-cluster,Javascript,Node.js,Multiprocessing,Fork,Node Cluster,为什么程序打印Hello World两次而不是一次?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一次 #include <unistd
import * as cluster from "cluster";
console.log("Hello World");
if (cluster.isMaster) {
const worker = cluster.fork();
worker.disconnect();
}
下面的c程序只打印Hello World一次
#include <unistd.h>
#include <stdio.h>
int main(void)
{
printf("HelloWorld/n");
fork();
return 0;
}
cluster.fork方法,它不会像在UNIX中那样执行fork系统调用。它确实创建了一个新的子进程,就像fork一样,但是这个新的子进程从一个全新的解释器实例开始,并且这个新的解释器从一开始就开始执行脚本。您将看到console.log在父进程中执行一次,在子进程中执行一次
child_process.fork的文档简要提到了这一点
与fork2 POSIX系统调用不同,child_process.fork不会克隆当前进程
…但我还是会说这个名字让人困惑
要解决这个问题,您可能需要将本例中的初始化逻辑console.log调用移动到if cluster.isMaster块中。cluster.fork方法,而不像在UNIX中那样执行fork系统调用。它确实创建了一个新的子进程,就像fork一样,但是这个新的子进程从一个全新的解释器实例开始,并且这个新的解释器从一开始就开始执行脚本。您将看到console.log在父进程中执行一次,在子进程中执行一次
child_process.fork的文档简要提到了这一点
与fork2 POSIX系统调用不同,child_process.fork不会克隆当前进程
…但我还是会说这个名字让人困惑
为了解决这个问题,您可能需要将本例中的初始化逻辑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");
}
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");
}