Есть неоходимость создать систему абсолютного распараллеливания.
Принцип прост: есть пул потоков. Ему кидаются задачи, которые имеют зависимость. Например: задача А может быт выполнена в любое свободное время.
задача Б только после задачи А
задача В только после задачи А
задача Г только после задачи Б
задача Д только после Б и В
и так далее.
Сами задачи могут генерироваться, как в любом из потоков пула, так и вовне.
Допустим все эти задачи поступили одновременно, то ожидается следующее поведение:
1. выполнить А одним потоком
2. потом начать выполнять Б и В двумя потоками
3. поток выполнявший Б сразу приступит к Г
4. как только закончится Б и В свободный поток (скорее всего тот что выполнил В) начинает выполнение Д
Ну в общем надеюсь понятно.
Реализовать нужно в с++.
Знаю, что похожую функциональность дает OpenMP, однако там сложно задать зависимость между задачами содаваемыми в разных функциях и потоках.
Перед тем, как начать писать велосипед
, хочу узнать, есть ли что либо близкое или(лучше
) полностью соответствующее таким требовамиям?