很多人说群集模块使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
非群集脚本如何胜过群集脚本?
这是脚本的github repo。
非群集脚本:
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`);
}
我的节点版本在Ubuntu 16.04上是7.10。
答案 0 :(得分:0)
我尝试在群集脚本
上将调度策略设置为SCHED_NONEcluster.schedulingPolicy = cluster.SCHED_NONE
现在,群集脚本不断超越非群集脚本。 yeeah