Node 主线程是单线程的,一个进程最多用满一个 CPU 核。cluster 让主进程 fork 出多个工作进程共享同一个服务器端口,由主进程以轮询方式把连接分发给各工作进程,从而把吞吐量成倍提升。工作进程崩溃时,主进程可以监听 exit 事件自动重建。
它本质上是对 child_process.fork 的上层封装,主从进程间通过 IPC 通信。与 PM2 这类进程管理器相比,cluster 需要自己处理重建、日志与平滑重启;在现代实践中,推荐直接用 PM2 的 cluster 模式,或改用 worker_threads 应对 CPU 密集任务,只有需要进程级隔离时才手写 cluster。
const cluster = require('cluster'); const http = require('http'); const os = require('os'); if (cluster.isMaster) { // 主进程:按 CPU 核数 fork 工作进程 for (let i = 0; i < os.cpus().length; i++) { cluster.fork(); } cluster.on('exit', (worker) => { console.log('工作进程退出,自动重建'); cluster.fork(); }); } else { // 工作进程:共享同一端口 http.createServer((req, res) => { res.end('由进程 ' + process.pid + ' 处理'); }).listen(3000); }