Я пытаюсь найти хороший шаблон для выполнения кучи параллельных задач.
Позвольте мне сформулировать задачу, чтобы проиллюстрировать это. Задачи 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)
выполняются.
Но как я могу сделать больше для множества параллельных задач?
a,b,c,d, etc
все либо запускают дочерние процессы, либо выполняют асинхронный ввод-вывод через сокет или поток. Node делает минимальный подъем. Фьючерсы - нет. Futures просто говорит, когда и da, и db возвращаются, запускаются ab. 17.05.2011