集群模式下的最大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个进程尝试了这个代码,它似乎在工作。 但是 – 这是一个好主意吗?

分叉数量等于CPU核心数目的原因是因为那是最佳数目。 那么增加它会降低性能,原因是既然你的处理器有N个核心,那么它只能同时处理N个进程。

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