Фреймворк, с которым я работаю, состоит из сервисов с отслеживанием состояния, которые зависят от других сервисов, образуя ациклический ориентированный граф http://en.wikipedia.org/wiki/Directed_acyclic_graph
Я хочу запускать сервисы максимально эффективно.Это означает запуск услуг параллельно, где это возможно.Например, на графике по ссылке в википедии.Я бы начал 3, 5 и 7 одновременно, поскольку они не имеют никаких зависимостей.Я видел топологические сортировки, но это само по себе не говорит вам, что можно запустить параллельно.Я ищу библиотеку / API для групповых услуг, что-то вроде:
a
b, c, d,
e.
f, g,
h
Где это говорит мне, чтобы сначала начать «a», затем «b», «c» и «d» впараллельно, затем "e" и т. д.
Я нашел несколько библиотек, которые моделируют вершины, но ничего не делает нужную группировку.Пока что я нашел несколько реализаций для ориентированного графа, однако мне нужна разрешающая лицензия (например, не gpl).Я нашел ComputeNodeOrder http://www.docjar.com/docs/api/org/eclipse/osgi/internal/resolver/ComputeNodeOrder.Digraph.html (из равноденствия org.eclipse.osgi_3.6.2.R36x_v20110210), Jgrapht (lgpl) http://www.jgrapht.org/javadoc/, Юнг http://jung.sourceforge.net/index.html, сплетение http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/dag/DAG.html ноне уверен, что какой-либо / все из них будет делать то, что мне нужно.