4.3 如何把任务分解给多个子进程去并发的执行
问题一:HappyPack是什么?
它把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。
问题二:HappyPack 原理?
在整个 Webpack 构建流程中,最耗时的流程可能就是 Loader 对文件的转换操作了,因为要转换的文件数据巨多,而且这些转换操作都只能一个个挨着处理。 HappyPack 的核心原理就是把这部分任务分解到多个进程去并行处理,从而减少了总的构建时间。
详细解释
从前面的使用中可以看出所有需要通过 Loader 处理的文件都先交给了happypack/loader去处理,收集到了这些文件的处理权后 HappyPack 就好统一分配了。
每通过new HappyPack()实例化一个 HappyPack 其实就是告诉 HappyPack 核心调度器如何通过一系列 Loader 去转换一类文件,并且可以指定如何给这类转换操作分配子进程。
核心调度器的逻辑代码在主进程中,也就是运行着 Webpack 的进程中,核心调度器会把一个个任务分配给当前空闲的子进程,子进程处理完毕后把结果发送给核心调度器,它们之间的数据交换是通过进程间通信 API 实现的。
核心调度器收到来自子进程处理完毕的结果后会通知 Webpack 该文件处理完毕。