node开启子线程_nodejs如何启动多进程?

Node.js默认采用单线程,但可通过多进程利用多核CPU优势。本文介绍了使用child_process模块的spawn、exec、execFile和fork四种方式创建子进程,实现Node的多线程执行能力。示例代码展示了如何通过spawn和exec方法启动子进程执行JavaScript文件。
摘要由CSDN通过智能技术生成

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 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);

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值