Подтвердить что ты не робот

Максимальное количество процессов node.js в режиме кластера

Почему все примеры режима кластера в node.js вилки числа процессов, равных числу ЦП?

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....
}

Можно ли использовать fork для большего количества процессов? Я пробовал этот код с 10 процессами на ядре-4 и, похоже, работает. Но... это хорошая идея?

4b9b3361

Ответ 1

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

Например: если у вас есть 4 ядра, и у вас есть 10 процессов, в которых каждый процесс будет иметь минимум 1 поток, только 4 из этих потоков могут выполняться одновременно вашим процессором. Остальные потоки будут ждать, пока их очередь будет выполнена процессором. Затем ваша ОС будет периодически запускать контекстный переключатель, в результате чего он приостанавливает текущий поток и переключается на поток, который ожидает, и вместо этого выполняет этот поток. Этот процесс "переключения" приводит к дополнительным дополнительным расходам на обработку. Поэтому для наиболее эффективного использования ваших циклов процессора вы хотите, чтобы количество ваших вилок (процессов) соответствовало количеству ваших ядер, чтобы свести к минимуму переключатели контекста.