在代码cluster.fork()中,node.js如何保证一个从core-1开始,第二个从core-2开始?
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
// Whats happening here? numCPUs is just a length, no reference to any core
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
}以及客户端请求如何在工作人员之间分配?
发布于 2016-02-20 04:06:23
Node不保证worker将在特定的cpu核心上运行。这些都是由操作系统处理和调度的。
Per the docs,客户端请求分为以下两种方式之一:
群集模块支持两种分配传入连接的方法。
第一种方法(也是除Windows之外的所有平台上的默认方法)是轮询方法,其中主进程侦听端口,接受新连接,并以循环方式在工作进程中分发它们,并使用一些内置的智能来避免工作进程过载。
第二种方法是主进程创建监听套接字并将其发送给感兴趣的工作进程。然后,工作进程直接接受传入的连接。
从理论上讲,第二种方法应该提供最佳性能。然而,在实践中,由于操作系统调度程序的反复无常,分布往往非常不平衡。已经观察到负载,其中超过70%的所有连接在总共八个进程中的两个进程中结束。
https://stackoverflow.com/questions/35513351
复制相似问题