2013-02-23 2 views
1

Я пытался понять это на некоторое время. Я написал очень простой сервер 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 с одинаковыми результатами.

Может кто-нибудь объяснить, что случилось с этим кодом? Или, почему я не вижу преимуществ/преимуществ при использовании кластера?

ответ

1

Ваш тест выглядит почти чисто ориентированным на В/В, и в этой ситуации использование cluster дает небольшую выгоду (как вы видели), потому что I/O является параллельным независимо.

Чтобы увидеть значительную выгоду, вам понадобятся части кода, которые связаны с процессором, потому что только тогда вы можете обеспечить дополнительный параллелизм между вашими сотрудниками кластера.

+1

Это имеет смысл, но означает ли это, что существует очень мало сценариев, в которых кластер имеет смысл использовать? – George

+0

@George Нет, я бы этого не сказал. В большинстве реальных приложений достаточно использования центрального процессора, чтобы сделать его полезным, но не тривиальный пример, как вы использовали. – JohnnyHK

Смежные вопросы