javascript - 为什么 "Hello world"打印了 2 次?

标签 javascript node.js multiprocessing fork node-cluster

为什么程序打印“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 程序只打印 1 次“Hello World”

#include <unistd.h>
#include <stdio.h>
int main(void)
{
   printf("HelloWorld/n");
   fork();
   return 0;
}

最佳答案

cluster.fork 方法(通过 child_process.fork ,即 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) block 中.

关于javascript - 为什么 "Hello world"打印了 2 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58248766/

相关文章:

javascript - 如何在不使用 Ajax 的情况下在表单中添加简单的自动完成功能?

javascript - 超出 ResizeObserver 循环限制 - 停止异常

node.js - 从另一种方法调用 api 网关方法的最佳做法是什么?

javascript - 当我想用nodejs进行mysql插入时,为什么会出现解析错误

python - 为什么 random.sample 与 multiprocessing.Pool 一起使用有时会死锁?

javascript - 在 jquery 上做这件事的最短方法是什么?

javascript - 如何将文本分解成单独的新行以便其他用户可以编辑并突出显示这些编辑(类似于 github)?

node.js - MomentJS 在 UTC 中获取 JavaScript 日期

python - 为什么通过共享内存的通信比通过队列慢得多?

python - 在 osx 上使用 numpy 的 lapack_lite 进行多处理的段错误,而不是 linux