请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

示例为什么会进入else?我执行的结果是无法进入else 的

if (cluster.isMaster) 是一个判断,代码第一次执行到这里时为true,然后执行函数 masterProcess(), 为什么会进入else呢?

正在回答

1回答

const cluster = require('cluster')
const cpus = require('os').cpus()
let workers = []
const masterProcess = () => {
  console.log(`一共有 ${cpus.length} 个核`)
  console.log(`Master 主进程 ${process.pid} 启动`)
  for (let i = 0; i < cpus.length; i++) {
    console.log(`正在 Fork 子进程 ${i}`)
    const worker = cluster.fork()
    workers.push(worker)
    worker.on('message', message => {
      console.log(`主进程 ${process.pid} 收到 '${JSON.stringify(message)}' 来自 ${worker.process.pid}`)
    })
  }
  workers.forEach(worker => {
    console.log(`主进程 ${process.pid} 发消息给子进程 ${worker.process.pid}`)
    worker.send({msg: `来自主进程的消息 ${process.pid}`})
  }, this)
}
const childProcess = () => {
  console.log(`Worker 子进程 ${process.pid} 启动`)
  process.on('message', message => {
    console.log(`Worker 子进程 ${process.pid} 收到消息 '${JSON.stringify(message)}'`)
  })
  console.log(`Worker 子进程 ${process.pid} 发消息给主进程`)
  process.send({msg: `来自子进程的消息 ${process.pid}`})
}
if (cluster.isMaster) {
  masterProcess()
  console.log(111)
} else {
  console.log(222)
  childProcess()
}


检查下代码有没有问题哈,这里第一次是 master 主进程启动,后面就是多少核,就启动多少子进程了

1 回复 有任何疑惑可以回复我~
  • 提问者 我是传奇1122 #1
    非常感谢! 是我当初没有理解 cluster 模块的工作原理, cluster.fork() 出来的子进程会再次执行 js 文件,同时 cluster.isMaster 为false, 代码被每个子进程都执行了一遍
    回复 有任何疑惑可以回复我~ 2018-09-27 10:27:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信