const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
我们生成的工作线程数量与系统中的核心数量相同。 因此,对于 4 个核心,我们在主进程中生成 4 个工作进程。那么主进程到底在哪里运行,即在哪个核心上?既然 master 将请求路由到工作线程,那么如何确保 master 始终在端口上运行并监听?
最佳答案
这是cpu调度
的一部分,操作系统将管理哪个核心应该运行哪个进程。
您可以创建比可用cpu
更多的子进程(不建议这样做),因此os
将处理哪个cpu核心将运行哪个进程,主进程可以共享cpu有一些子进程。
关于node.js - Node.js 中的集群模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66581215/