Javascript 为什么非集群应用在nodejs中表现优于集群应用?

Javascript 为什么非集群应用在nodejs中表现优于集群应用?,javascript,node.js,Javascript,Node.js,很多人说cluster模块使node.js应用程序比普通应用程序更快。但我在这里的经历令人困惑。我创建了两个脚本,第一个是不使用集群模块的常规http服务器。第二个脚本是使用集群模块的http服务器 我正在使用apache基准向这些服务器发送高请求。结果如下: Attempt#1: non-cluster: 15,418 req/sec cluster: 10,333 req/sec Attempt#2: non-cluster: 12,563 req/sec cluster: 9,874 r

很多人说cluster模块使node.js应用程序比普通应用程序更快。但我在这里的经历令人困惑。我创建了两个脚本,第一个是不使用集群模块的常规http服务器。第二个脚本是使用集群模块的http服务器

我正在使用apache基准向这些服务器发送高请求。结果如下:

Attempt#1:
non-cluster: 15,418 req/sec
cluster: 10,333 req/sec

Attempt#2:
non-cluster: 12,563 req/sec
cluster: 9,874 req/sec
非集群脚本如何优于集群脚本

下面是脚本的示例

非群集脚本:

const http = require('http');

const server = http.createServer((req, res) => {
  res.end('Hello World!');
});

server.listen(process.env.SERVER_PORT, () => {
  console.log('Server started on port ' + process.env.SERVER_PORT);
});
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!');
  }).listen(process.env.SERVER_PORT);

  console.log(`Worker ${process.pid} started`);
}
群集脚本:

const http = require('http');

const server = http.createServer((req, res) => {
  res.end('Hello World!');
});

server.listen(process.env.SERVER_PORT, () => {
  console.log('Server started on port ' + process.env.SERVER_PORT);
});
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!');
  }).listen(process.env.SERVER_PORT);

  console.log(`Worker ${process.pid} started`);
}
const cluster=require('cluster');
const http=require('http');
const numpus=require('os').cpus().length;
if(cluster.isMaster){
log(`Master${process.pid}正在运行`);
//叉工。
for(设i=0;i{
log(`worker${worker.process.pid}`);
});
}否则{
//工作者可以共享任何TCP连接
//在本例中,它是一个HTTP服务器
http.createServer((req,res)=>{
书面记录(200);
res.end(“你好,世界!”);
}).listen(process.env.SERVER\u端口);
log(`Worker${process.pid}已启动`);
}

我的节点版本是Ubuntu 16.04上的7.10。

我尝试在集群脚本上将调度策略设置为SCHED_NONE

cluster.schedulingPolicy = cluster.SCHED_NONE

现在,集群脚本的性能不断优于非集群脚本。是的,绝对的回答是不可能的。这取决于您的代码形式,请将您的代码附加到此问题。问题中的脚本位于github repo上。如果您在windows上,则默认值似乎存在一些问题,