nodejs如何启动多进程?

更新日期: 2019-11-26阅读: 2k标签: 进程

Node.js 以单线程的模式运行,使用事件驱动来处理异步 IO 并发(底层是多线程的线程池)。

然而,要是 Node 运行在一个多核 CPU 上,如何让 Node 充分利用多核的优势,并行地处理任务?我们可以使用多进程。由于 Node 的单线程特性,开启多进程后,Node 也获得多线程的执行能力。


Node提供了child_process模块来创建子进程。

Node创建子进程的4种方式:

1、spawn()

创建一个子进程来执行命令

2、exec()

创建一个子进程来执行命令,和spawn()不同的是方法参数不同,它可以传入回调函数来获取子进程的状态

3、execFile()

启动一个子进程来执行指定文件。注意,该文件的顶部必须声明SHEBANG符号(#!)用来指定进程类型。

4、fork()

和spawn()类似,不同点在于它创建Node的子进程只需要执定要执行的JavaScript文件模块即可。

注意:后面的3种方法都是spawn()的延伸应用。

例:

使用spawn方式创建子进程:

/* 
    Use spawn.
*/
for (let i = 0; i < 3; i++) {
    /* child_process.spawn(command[, args][, options]) */
    /* args is an array of string */
    const childProcessorSpawn = child_process.spawn("node", ["child.js", i]);
    childProcessorSpawn.stdout.on("data", (data) => {
        console.log(`stdout: ${data}`);
    });
    childProcessorSpawn.stderr.on("data", (data) => {
        console.log(`stderr: ${data}`);
    });

    childProcessorSpawn.on("close", function(code) {
        /* Any exit code other than 0 is considered to be an error. */
        console.log("Child process closed, code: " + code);
    });
}

使用exec方式创建子进程:

const child_process = require("child_process");

/* 
    Use exec.
*/
for (let i = 0; i < 3; i++) {
    /* child_process.exec(command[, options], callback) */
    /* callback <Function> called with the output when process terminates. */
    const childProcessorExec = child_process.exec("node child.js " + i, function(error, stdout, stderr) {
        if (error) {
            console.error(`exec error: ${error}`);
            return;
        }
        /* ES6 template literal */
        console.log(`stdout: ${stdout}`);
        console.log(`stderr: ${stderr}`);
        // console.log("stdout: " + stdout);
        // console.log("stderr: " + stderr);
    });

    childProcessorExec.on("exit", function(code) {
        /* Any exit code other than 0 is considered to be an error. */
        console.log("Child process exited, code: " + code);
    });
}

链接: https://www.fly63.com/article/detial/7726

Node.js的进程与子进程:从文档到实践

process 模块是 nodejs 提供给开发者用来和当前进程交互的工具,它的提供了很多实用的 API。从文档出发,管中窥豹,进一步认识和学习 process 模块:

Node.js几种创建子进程方法

其中exec可用于在指定的shell当中执行命令。不同参数间使用空格隔开,可用于复杂的命令。传给回调的stdout和stderr参数会包含子进程的stdout和stderr的输出。

NodeJS 进程是如何退出的

有几种因素可以导致 NodeJS 进程退出。在这些因素中,有些是可预防的,比如代码抛出了一个异常;有些是不可预防的,比如内存耗尽。process 这个全局变量是一个 Event Emitter 实例,如果进程优雅退出,process 会派发一个 exit 事件

Pandora.js让进程间通信更容易

进程间通信 IPC-Hub,简洁的进程间对象代理,经过努力,我们提出了『简洁的进程间对象代理』,看下面的例子会清楚得多:

进程和线程有什么区别?

从用户的角度来看,进程是正在运行的程序实例,而线程是进程中真正执行任务的基本单位。也就是说一个运行的程序至少包含一个进程,一个进程至少包含一个线程,线程不能独立于进程而存在。

进程与线程,你了解多少?

进程与线程,在面试中经常会被问到,或者实际开发中经常遇到。那什么是进程?什么是线程?你对他们了解有多少?我们经常会说:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!