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

来源:7-5 单线程多进程模型 事件循环及进程通信

我是传奇1122

2018-09-17

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

写回答

1回答

Scott

2018-09-19

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
1
我是传奇1122
非常感谢! 是我当初没有理解 cluster 模块的工作原理, cluster.fork() 出来的子进程会再次执行 js 文件,同时 cluster.isMaster 为false, 代码被每个子进程都执行了一遍
2018-09-27
共1条回复

Koa2框架从0开始构建预告片网站

Koa2+MongoDB+Parcel+Puppeteer+AntDesign快速搭建预告片网站

751 学习 · 362 问题

查看课程