Я пытался понять это на некоторое время. Я написал очень простой сервер http в узле, чтобы сравнить эффект использования кластера. Вот мой код:Node.js Производительность с использованием кластера
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 с одинаковыми результатами.
Может кто-нибудь объяснить, что случилось с этим кодом? Или, почему я не вижу преимуществ/преимуществ при использовании кластера?
Это имеет смысл, но означает ли это, что существует очень мало сценариев, в которых кластер имеет смысл использовать? – George
@George Нет, я бы этого не сказал. В большинстве реальных приложений достаточно использования центрального процессора, чтобы сделать его полезным, но не тривиальный пример, как вы использовали. – JohnnyHK