const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
// 如果是主进程
console.log(`Master process ${process.pid} is running`);
// 创建子进程,每个 CPU 核心一个
const numCPUs = os.cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
// 监听子进程退出事件,如果有子进程退出,创建新的子进程
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker process ${worker.process.pid} died`);
cluster.fork();
});
} else {
// 如果是工作进程
console.log(`Worker process ${process.pid} started`);
// 在这里编写实际的应用逻辑
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello, world!\n');
});
server.listen(3000, () => {
console.log(`Server is listening on port 3000 in worker process ${process.pid}`);
});
}
在这个例子中,如果是主进程(cluster.isMaster 为真),则创建与 CPU 核心数相同的子进程,并监听子进程退出事件。如果有子进程退出,主进程会创建一个新的子进程来代替。如果是子进程,则创建 HTTP 服务器来处理实际的应用逻辑。
通过这种方式,可以充分利用多核系统的资源,提高应用程序的并发处理能力。在实际应用中,可以根据具体需求进行更复杂的进程管理和通信。注意,cluster 模块并不是唯一的多进程管理方式,还可以使用其他模块,如 pm2、forever 等,或结合容器化技术来管理多进程。
转载请注明出处:http://www.zyzy.cn/article/detail/4750/Node.js