假设有四个任务'a','b','c','d'(b取决于c和d; c和d都依赖于a),因此任务按以下顺序运行:
a->(c,d) - > b
这是相应的gulpfile.js:
gulp.task('a');
gulp.task('c', ['a']);
gulp.task('d', ['a']);
gulp.task('b', ['c', 'd']);
Run Code Online (Sandbox Code Playgroud)
尽管任务'c'和'd'都依赖于任务'a',但gulp足够聪明,任务'a'只运行一次.我想知道,因为任务以最大并发运行,gulp如何在运行之前解决依赖关系?
记录它的一种更好的方法是"gulp(orchestrator)在考虑所有指定的依赖关系之后以最大可能的并发性运行."
那么在你的场景中,c和d实际上是"并行"运行吗?嗯,是的,不.因为JavaScript是单线程的,所以从技术上讲,处理器可以执行c或d,但不能同时执行两者.Gulp(orchestrator)将启动a,等待它完成,然后启动c和d,并等待两者完成,然后启动b.
如果任务c和d完全异步,您将看到两者同时执行.(注意gulp定时输出交织在一起.)如果任务是完全同步的,从技术上讲,它们不会"并行"运行......只是因为JavaScript是单线程的.
这是最大可能的并发性,可以计算所有指定的限制.