Node.js 多进程学习笔记

Node.js 支持多进程的方式有很多,其中比较常用的方式有:

  • child_process 模块
  • cluster 模块

child_process 模块

child_process 模块提供了四个方法来创建子进程:exec、execFile、spawn 和 fork。

exec 方法

exec 方法可以执行一个 shell 命令,并且将结果返回给回调函数。

实例代码:

javascriptCopy Code
const { 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 Code
const { 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 Code
const 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 多进程的基本用法和实例。