Cluster是Node.js提供的一个模块,用于创建多进程应用。它可以让我们轻松地创建一个主进程和多个工作进程,充分利用多核CPU的优势,提高应用的性能和稳定性。
使用Cluster非常简单,只需要在主进程中调用cluster.fork()方法即可创建一个工作进程。下面是一个简单的例子:
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();
}
} else {
// 工作进程可以共享任何 TCP 连接
// 在本例子中,它是一个 HTTP 服务器
http.createServer((req, res) => {
res.writeHead(200);
res.end('你好世界\n');
}).listen(8000);
console.log(`工作进程 ${process.pid} 已启动`);
}
在这个例子中,我们使用了Node.js内置的http模块创建了一个HTTP服务器。如果是主进程,就会调用cluster.fork()方法创建多个工作进程,每个工作进程都会启动一个HTTP服务器。
需要注意的是,工作进程可以共享任何TCP连接。在这个例子中,每个工作进程都会监听同样的端口号8000。当有请求到来时,会被分配到其中一个工作进程处理。
Cluster模块提供了一些事件,可以让我们监听工作进程的变化,例如工作进程的退出、重新启动等。下面是一些常用的事件:
我们可以在主进程中监听这些事件,以便实现更加复杂的多进程应用。
使用Cluster进行多进程处理的优点如下:
缺点如下: