我一直试图弄清楚这一点。我在node中写了一个非常简单的http服务器来对使用集群的效果进行基准测试。这是我的代码:
var cluster = require('cluster');
var http = require('http');
var numCPUs = 0; //require('os').cpus().length;
if(process.argv.length >= 3)
{
numCPUs = process.argv[2];
}
if (cluster.isMaster && numCPUs > 0) {
console.log("launching " + numCPUs + " procs");
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
console.log("launching proc #" + i);
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
});
} else {
// Worker processes have a http server.
http.Server(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(3000);
}
问题是我根本没有看到任何性能提升。1 进程在大多数情况下具有更好的性能。而且,如果我添加更多工作,例如从 redis 或 mongo 检索数据,那么增加进程会有所帮助,但只是适度(大约 15%)。我已经在 i7 MBPr(带 HT 的四核)和 i5(四核)Win7 系统上进行了尝试,结果相同。
有人可以解释一下这段代码有什么问题吗?或者,为什么我没有看到使用集群的优势/好处?