【发布时间】:2011-08-24 18:37:32
【问题描述】:
我正在努力寻找一种好的模式来执行一堆并行任务。
让我定义一些任务来举例说明。任务a, b, c, d, e, f, g 执行为a(function(er, ra){//task a returned, ra is result}),b 到g 也是如此
还有一些任务需要在完成某个任务后执行,我们称它们为ab, bc, abc, bd, bcd, af, fg,意思是当a和b返回时ab(ra, rb)应该立即执行,而当b和c返回,bc(rb, rc)应该立即执行,如果a,b,c全部返回,abc(ra, rb, rc)应该被执行。
对于最简单的情况,如果只有a 和b,我可以这样做:
(function(cb){
var count = 2, _ra, _rb;
function update(){if(--count == 0) cb(null, _ra, _rb)}
a(function(er, ra){_ra = ra; update()});
b(function(er, ra){_rb = rb; update()});
})(function(er, ra, rb){
ab(ra, rb);
});
如您所见,a 和 b 并行执行,当两者都完成后,ab(ra, rb) 执行。
但是我怎样才能为大量并行任务做更多的事情呢?
【问题讨论】:
标签: javascript design-patterns concurrency node.js parallel-processing