在 Node.js 中,cluster
模块是用于创建多进程应用的模块,可以通过充分利用多核 CPU 来提高 Node.js 应用的性能和并发能力。
cluster
模块通过在主进程中创建多个子进程来实现多进程的方式。每个子进程都可以独立执行 Node.js 应用的代码,包括监听端口、处理请求等任务。这样可以充分利用多核 CPU 的处理能力,提高应用的性能和并发处理能力。
在使用 cluster
模块时,可以通过调用 cluster.fork()
方法来创建一个或多个子进程,每个子进程都会执行一份相同的代码,并且可以独立地监听端口。例如,以下是一个简单的使用 cluster
模块开启多进程的示例:
javascriptCopy codeconst cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master process ID: ${process.pid}`);
// 创建多个子进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
// 子进程运行的代码
console.log(`Worker process ID: ${process.pid}`);
// 创建 HTTP 服务器并监听端口
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World');
}).listen(3000);
}
上述示例中,主进程使用 cluster.isMaster
判断是否是主进程,如果是,则通过 cluster.fork()
创建多个子进程,每个子进程都会执行相同的代码。子进程则通过创建 HTTP 服务器来监听端口,处理请求。
需要注意的是,虽然每个子进程都可以监听相同的端口,但在实际运行中,只有其中一个子进程会真正地监听该端口,而其他子进程则会处于空闲状态。这是因为操作系统会使用操作系统级别的负载均衡机制,将请求分配给不同的子进程,从而实现多进程之间的负载均衡。因此,一个端口可以被多个进程监听,但实际上只有一个进程会处理请求。