最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 7浏览 0评论

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

为什么程序要打印两次“ Hello World”而不是仅打印1次?在cluster.fork()之前先执行console.log。

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,通过child_process.fork)没有像在UNIX中那样进行calls系统调用。它像fork一样创建一个新的子进程,但是该新子进程从一个全新的解释器实例开始,并且该新解释器从头开始执行脚本。您会看到fork在父进程中执行一次,在子进程中执行一次。console.log的文档简要提到了这一点...

与fork(2)POSIX系统调用不同,child_process.fork()不会克隆当前进程。

...但是我还是会说这个名字很混乱。

要解决此问题,您可能希望将初始化逻辑(在此示例中为child_process.fork调用)移到console.log块中。

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

为什么程序要打印两次“ Hello World”而不是仅打印1次?在cluster.fork()之前先执行console.log。

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,通过child_process.fork)没有像在UNIX中那样进行calls系统调用。它像fork一样创建一个新的子进程,但是该新子进程从一个全新的解释器实例开始,并且该新解释器从头开始执行脚本。您会看到fork在父进程中执行一次,在子进程中执行一次。console.log的文档简要提到了这一点...

与fork(2)POSIX系统调用不同,child_process.fork()不会克隆当前进程。

...但是我还是会说这个名字很混乱。

要解决此问题,您可能希望将初始化逻辑(在此示例中为child_process.fork调用)移到console.log块中。

发布评论

评论列表 (0)

  1. 暂无评论