Node.js通过Cluster模块实现多进程,利用多核CPU提升并发性能。主进程管理worker,各worker共享端口并由系统负载均衡。主进程监控worker状态,崩溃后自动重启,保障服务稳定。默认轮询分发连接,支持IPC通信,便于日志收集与状态监控。建议worker数匹配CPU核心,结合PM2等工具优化部署,应用应无状态或使用外部存储共享数据,避免内存浪费与数据不一致。

Node.js 是单线程的,这意味着一个 Node.js 实例只能利用一个 CPU 核心。在多核服务器上,这会造成资源浪费。为了解决这个问题,Node.js 提供了 Cluster 模块,允许你创建多个工作进程(worker processes),每个进程运行在独立的 CPU 核心上,从而提升应用的并发处理能力。
Cluster 模块基于 child_process 模块实现,它允许主进程(master)创建多个子进程(workers)。这些 worker 进程共享同一个网络端口,能够同时监听和处理 HTTP 请求。操作系统层面会自动将连接分发给不同的 worker,实现负载均衡。
主进程不处理具体业务逻辑,只负责管理 worker 进程:启动、监控、重启失败的进程等。如果某个 worker 崩溃,主进程可以重新启动一个新的,提高系统的稳定性。
下面是一个使用 Cluster 模块启动多个 worker 的简单示例:
const cluster = require('cluster'); const http = require('http'); const os = require('os'); const numCPUs = os.cpus().length; if (cluster.isMaster) { console.log(`主进程 ${process.pid} 正在运行`); // 创建与 CPU 核心数相同的工作进程 for (let i = 0; i { console.log(`工作进程 ${worker.process.pid} 已退出`); console.log('正在重启新的工作进程...'); cluster.fork(); }); } else { // worker 进程:创建 HTTP 服务器 http.createServer((req, res) => { res.writeHead(200); res.end('Hello from worker ' + process.pid); }).listen(3000); console.log(`工作进程 ${process.pid} 已启动`); }在这个例子中:
Cluster 模块默认使用轮询方式(round-robin)分发连接,也可以设置为操作系统默认策略。对于大多数 Web 服务来说,默认配置已经足够高效。
如果你希望强制使用轮询调度,可以在 fork 前设置:
cluster.schedulingPolicy = cluster.SCHED_RR;注意:在 Windows 平台或某些系统上,调度策略可能不会生效,系统会自动降级处理。
主进程和 worker 之间可以通过内置的 IPC 通道通信。例如,worker 可以向主进程发送日志、状态信息或异常报告。
在 worker 中发送消息:
process.send({ type: 'log', data: 'Worker 正在处理请求' });在主进程中监听:
cluster.on('message', (worker, message) => { console.log(`来自 worker ${worker.id}:`, message); });这种机制适合用于集中式日志收集、健康检查或动态配置更新。
基本上就这些。使用 Cluster 模块能有效提升 Node.js 应用的性能和容错能力,尤其适用于高并发的 Web 服务场景。合理配置下,可以充分发挥现代多核服务器的硬件优势。
以上就是使用Node.js的Cluster模块充分利用多核CPU的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号