Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么“Hello world”要打印两次?_Javascript_Node.js_Multiprocessing_Fork_Node Cluster - Fatal编程技术网

Javascript 为什么“Hello world”要打印两次?

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

为什么程序打印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.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");
}