为啥“Hello world”会打印 2 次?
Posted
技术标签:
【中文标题】为啥“Hello world”会打印 2 次?【英文标题】:Why is the "Hello world" printed 2 times?为什么“Hello world”会打印 2 次? 【发布时间】:2020-02-03 12:31:54 【问题描述】:为什么程序打印“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 程序仅打印 1 次“Hello World”
#include <unistd.h>
#include <stdio.h>
int main(void)
printf("HelloWorld/n");
fork();
return 0;
【问题讨论】:
【参考方案1】:cluster.fork
方法(通过 child_process.fork
,它是 calls)不会像在 UNIX 中那样执行 fork
系统调用。它确实创建了一个新的子进程,就像 fork 一样,但是这个新的子进程从一个全新的解释器实例开始,并且这个新的解释器从头开始执行脚本。您会看到 console.log
在父进程中执行一次,在子进程中执行一次。
child_process.fork
的文档简要提到了这一点...
与 fork(2) POSIX 系统调用不同,child_process.fork() 不会克隆当前进程。
...但我仍然会说这个名字令人困惑。
要解决此问题,您可能需要将初始化逻辑(在本例中为 console.log
调用)移动到 if (cluster.isMaster)
块中。
【讨论】:
【参考方案2】: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 次?的主要内容,如果未能解决你的问题,请参考以下文章
n power n print 'Hello World' 不计算值