Javascript 为什么非集群应用在nodejs中表现优于集群应用?
很多人说cluster模块使node.js应用程序比普通应用程序更快。但我在这里的经历令人困惑。我创建了两个脚本,第一个是不使用集群模块的常规http服务器。第二个脚本是使用集群模块的http服务器 我正在使用apache基准向这些服务器发送高请求。结果如下: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
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上,则默认值似乎存在一些问题,