Node.js 是单线程的,如何利用多核 CPU?cluster 和 worker_threads 有什么区别?
Node 主线程单线程,但可通过多进程/多线程利用多核:
- cluster:
fork出多个子进程(每个进程一个 Event Loop),共享同一端口,主进程做负载均衡。适合 CPU 密集的 HTTP 服务。 - worker_threads:同一进程内开多个工作线程(各有一个独立的 V8 实例 + Event Loop),线程间可共享
SharedArrayBuffer,通信开销低于进程。 - child_process:
spawn/exec/fork启动独立子进程,常用于调用外部命令。
import cluster from 'cluster'
import os from 'os'
if (cluster.isPrimary) {
os.cpus().forEach(() => cluster.fork())
} else {
// 每个 worker 启动同一份服务器代码
}选择:I/O 密集首选 cluster;计算密集且需频繁传大数据用 worker_threads(避免进程间序列化成本)。