nodejs cluster 疑问
发布于 2 年前 作者 zhangking520 1013 次浏览 最后一次编辑是 4 个月前 来自 问答
var cluster = require('cluster'); 
var http = require('http'); 
 
if (cluster.isMaster) { 
  var numCPUs = require('os').cpus().length; 
  var data = 0; 
  // 启动多个进程. 
  for (var i = 0; i < numCPUs; i++) { 
   //增加一个进程 
    var worker_process = cluster.fork();
    //侦听子进程的message事件 
    worker_process.on('message', function(msg) { 
      if (msg.cmd && msg.cmd == 'notifyRequest') { 
        data++; 
        console.log('DATA VALUE : %d ', data);
      } 
    }); 
  } 
} else { 
    process.send({ cmd: 'notifyRequest' }); 
} 

如以上代码,我可能有些基础没搞清楚。 1.进程数为何与核数挂钩?如果4核,我在上面代码fork 5个 子进程,我看不到问题。 2.每个子进程监听了message,process.send我以为是发送给主进程的,为何子进程会收到.

5 回复

第二问题不太清楚 但是第一个我可以说说我自己的理解 实际上进程数目和CPU核心数没有必然联系 但是每一个核心的执行是相对独立的 比如你在一个核心上使用两个进程的时候会存在时间分片的问题 但是两个核心则是相互独立的 也就是在真正的同时运作两个任务了 这样的话你四个核心四条进程 也就不存在有时间分片和抢资源的情况存在了 你在当前任务不是很大的情况下是感觉不到资源抢占和时间分片带来的损失的 但是在大型任务和请求非常多 并发量大的时候 可能就有不一样的感觉了 当然这是我个人的理解

同问,假设机器有4个核,一个主进程,四个子进程,那不一共五个进程了么?

楼上解释了第一个问题 第二个问题 你写的worker.on('ms'),当然是给worker注册监听了

@wenshiqi0 你的理解是正确的,碰到你说的问题,进程与CPU做下绑定,在条件允许的情况下,操作系统就尽量使用某个CPU处理绑定的进程。

node需要借助外部库,我自己实现linux下是原生就是支持进程与CPU绑定的。

进程多少没关系,高兴fork几个就几个,但不是越多越好,自己测试看效率最优就行了,多了也是无谓的切换。

回到顶部