群集模式下的最大node.js进程数

Pet*_*kan 23 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....
}
Run Code Online (Sandbox Code Playgroud)

是否有可能分叉到更多的进程?我在core-4上尝试了10个进程的代码,它似乎正在工作.但是 - 这是一个好主意吗?

Yur*_*bin 23

叉的数量等于CPU核心数的原因是因为这是最佳数量.增加它可以降低性能,原因是因为如果你的处理器有N个核心,它只能同时处理N个进程.

例如:如果你有4个内核,并且你有10个进程,每个进程至少有1个线程,那么你的CPU只能同时执行其中4个线程.其余的线程将等待轮到他们执行处理器.然后,您的操作系统将间歇性地执行上下文切换,从而暂停正在运行的线程,并切换到正在等待的线程,然后执行该线程.这种"切换"过程导致额外的处理开销.因此,为了最有效地使用CPU周期,您希望叉(进程)的数量与核心数相匹配,以便最大限度地减少上下文切换.