关于node的多进程。

问题来源:因为webpack每次打包的时候打包的时间都有点出入,有时候两次打包时间差的还挺多的,所以我想通过node的多进程去同时打包相同webpack配置的项目,取一个平均值。(我想做一个关于不同webpack配置,比较优化性能)

  • 问题一: node.js 一次能开多少进程

    • 查看相关资料得到一个结论:node能开的进程数取决于cpu的核数,所以我得出的结论是理论上node 一次只能开4个进程(cpu 4核情况下)
    • 但是我通过一个for 循环去执行 require('child_process').fork('./child.js'),当我循环10次的时候得到了pid不同的10个进程, 如下:
// index.js
const childProcess = require('child_process');

for (let i = 0; i < 10; ++i) {
  childProcess.fork('./child.js');
}

// child.js
console.log('Worker-' + process.pid + ': Hello world.')

// output
Worker-91432: Hello world.
Worker-91433: Hello world.
Worker-91434: Hello world.
Worker-91437: Hello world.
Worker-91435: Hello world.
Worker-91441: Hello world.
Worker-91436: Hello world.
Worker-91439: Hello world.
Worker-91440: Hello world.
Worker-91438: Hello world.
  • 问题2:为什么同样的配置,每次webpack 打包的时间相差的都比较多,有时候能甚至差20几秒

求教 ?

阅读 2.4k
3 个回答
  1. cpu多少核表示你能同时运行的进程数目,而不是表示你能狗同时打开的进程,操作系统了解一下
  2. 涉及到进程调度,同上

问题一,这个指的是同时存在的进程。
问题二,如果你不列出配置的话,很难分析出现锯齿状的打包性能表现。不知你是否使用了类似 happypack 等插件,如果就是比较简单的配置的话,相同配置确实不应该差20几秒,唯一可能的原因是不是你打包的时候,其他运行的应用程序占据了操作系统的资源,从而致使打包速度变慢?这个要分析就很复杂了。

关于问题1,我想应该是先执行的进程先退出了,我通过去监听close事件看了下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题