Запуск услуг - направленный ациклический граф - PullRequest
1 голос
/ 27 марта 2011

Фреймворк, с которым я работаю, состоит из сервисов с отслеживанием состояния, которые зависят от других сервисов, образуя ациклический ориентированный граф 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 ноне уверен, что какой-либо / все из них будет делать то, что мне нужно.

1 Ответ

0 голосов
/ 27 марта 2011

Звучит как дерево, повторяемое с использованием поиска в ширину. Каждый уровень имеет сервисы, которые могут быть запущены параллельно; более поздние зависимости находятся ниже в дереве.

...