node.js如何保证每个工作线程位于不同的cpu核心上?

node.js如何保证每个工作线程位于不同的cpu核心上?,node.js,cluster-computing,Node.js,Cluster Computing,在codecluster.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++)

在code
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);
}
const cluster=require('cluster');
const http=require('http');
const numpus=require('os').cpus().length;
if(cluster.isMaster){
//叉工。
对于(变量i=0;i{
log(`worker${worker.process.pid}`);
});
}否则{
http.createServer((req,res)=>{
书面记录(200);
res.end('hello world\n');
}).听(8000);
}

客户端请求如何在工作者之间分配?

节点不保证工作者将在特定的cpu核心上运行。这些都是由操作系统处理和安排的

,客户端请求分为以下两种方式之一:

群集模块支持两种分配传入连接的方法

第一种方法(以及除Windows之外的所有平台上的默认方法)是循环方法,主进程侦听端口,接受新连接,并以循环方式将它们分发到工作进程,同时使用一些内置的smarts避免工作进程过载

第二种方法是主进程创建侦听套接字并将其发送给感兴趣的工作人员。然后,工人直接接受传入的连接

从理论上讲,第二种方法应该提供最佳性能。然而,在实践中,由于操作系统调度程序的变化无常,分布往往非常不平衡。在总共八个过程中,有超过70%的连接仅在两个过程中结束


中介绍了将请求路由到不同工作者的过程。两种可能的方法-取决于平台。如果我们使用任何负载平衡器,如
nginx
,在不同端口上使用两个
node.js
进程,将类似于使用两个工作进程的单端口?那么可能my
core-1
处于空闲状态(可能?是。可能?不是。操作系统和CPU非常擅长跨其内核调度工作。是否有办法确保每个进程将在不同的内核上运行?