Node.js 多进程学习笔记
Node.js 支持多进程的方式有很多,其中比较常用的方式有:
- child_process 模块
- cluster 模块
child_process 模块
child_process 模块提供了四个方法来创建子进程:exec、execFile、spawn 和 fork。
exec 方法
exec 方法可以执行一个 shell 命令,并且将结果返回给回调函数。
实例代码:
javascriptCopy Codeconst { exec } = require('child_process');
exec('ls', (error, stdout, stderr) => {
if (error) {
console.error(`执行出错: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
spawn 方法
spawn 方法也可以执行一个 shell 命令,但是它以流的形式返回结果,而不是一次性返回。
实例代码:
javascriptCopy Codeconst { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
ls.on('close', (code) => {
console.log(`子进程退出码:${code}`);
});
cluster 模块
cluster 模块是基于 child_process 封装的多进程模块,可以帮助我们更方便地实现多进程。
实例代码:
javascriptCopy Codeconst cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`主进程 ${process.pid} 正在运行`);
// 创建工作进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
// 工作进程退出时,重新启动新的工作进程
cluster.on('exit', (worker, code, signal) => {
console.log(`工作进程 ${worker.process.pid} 已退出`);
cluster.fork();
});
} else {
// 工作进程创建服务器
http.createServer((req, res) => {
res.writeHead(200);
res.end('你好世界\n');
}).listen(8000);
console.log(`工作进程 ${process.pid} 已启动`);
}
以上就是 Node.js 多进程的基本用法和实例。