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

时间:2015-01-23 11:05:01

标签: 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 个答案:

答案 0 :(得分:22)

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

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