クラスターモードでのNode.jsプロセスの最大数 質問する

クラスターモードでのNode.jsプロセスの最大数 質問する

node.js のクラスター モードのすべての例が、CPU の数と同じプロセスの数にフォークするのはなぜですか?

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }

    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {
    // worker process
    // do the job....
}

より多くのプロセスにフォークすることは可能ですか? core-4 の 10 プロセスでこのコードを試してみましたが、動作しているようです。しかし、それは良い考えでしょうか?

ベストアンサー1

フォークの数が CPU コアの数と等しい理由は、それが最適な数だからです。それを超えてフォークの数を増やすと、パフォーマンスが低下する可能性があります。これは、プロセッサに N 個のコアがある場合、同時に処理できるプロセスは N 個だけであるためです。

たとえば、4つのコアがあり、10のプロセスがあり、各プロセスに少なくとも1つのスレッドがある場合、CPUで同時に実行できるのは4つのスレッドだけです。残りのスレッドは、プロセッサによって実行される順番を待つことになります。その後、OSは断続的に次の処理を実行します。コンテキストスイッチ、実行中のスレッドを一時停止し、待機中のスレッドに切り替えて、代わりにそのスレッドを実行します。この「切り替え」プロセスにより、追加の処理オーバーヘッドが発生します。したがって、CPU サイクルを最も効率的に使用するには、コンテキストの切り替えを最小限に抑えるために、フォーク (プロセス) の数をコアの数と一致させる必要があります。

おすすめ記事