然而,要是 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); }); }
以上就是nodejs如何启动多进程?的详细内容,更多请关注易知道|edz.cc其它相关文章!