私は複数のCPUコア(私の場合は4)から利益を得るためにnode.jsでクラスタモジュールを使用しています。問題は、作業者がビジー状態の場合、約10秒後に次の要求が別の使用可能な作業者に委任され、これは受け入れられないことです。次のように私は、クラスタをテストするために無限ループを使用しています:ノードjs - 要求を委譲する前のクラスタ遅延
var cluster = require ('cluster');
if (cluster.isMaster) {
var cpuCount = require('os').cpus().length;
for (var i = 0; i < cpuCount-1; ++i) {
cluster.fork();
}
} else {
var express = require('express');
var app = express();
app.get('/', function (req, res) {
console.log('Served by worker %d!', cluster.worker.id);
while(true) {}
console.log("done");
res.status(200).send();
});
app.listen(8080, function() {
console.log('Worker %d running!', cluster.worker.id);
});
}
cluster.on('exit', function (worker) {
console.log('Worker %d died :(', worker.id);
cluster.fork();
});
最初に私はlocalhostを開く:ブラウザで8080を、メッセージをログ「作業員1で役立った」瞬時に印刷されています。その後、同じページを新しいタブで開き、10秒後に「Served by worker 2」が表示されます。これはなぜですか?また、リクエストをすぐに利用可能なワーカーに委譲するにはどうすればよいですか?
「クラスタ」は、マスタープロセスと子プロセスが互いに通信できるようにすることです。無限ループで子プロセスを完全にブロックしている場合、その通信は事実上ブロックされています。 – robertklep