Obtendo itens paralelos na resolução de dependências


13

Eu implementei uma classificação topológica com base no artigo da Wikipedia que estou usando para resolução de dependências, mas ele retorna uma lista linear. Que tipo de algoritmo posso usar para encontrar os caminhos independentes?


1
Uma maneira de resolver isso é modelar os nós no gráfico como atores e deixar que uma biblioteca de atores cuide da ordem.
svick

Respostas:


16

Suponho que uma borda significa que u deve ser executado antes de v . Se não for esse o caso, vire todas as bordas. Além disso, suponho que você esteja menos interessado em caminhos (já fornecidos pelo DAG) do que em uma boa estratégia de execução, dadas as dependências.(você,v)vocêv

SEuG=(V,E)

S0 0={vVvocêV.(você,v)E}SEu+1={vVvocêV.(você,v)Evocêk=0 0EuSk}

k

for i=0 to k
  parallel foreach T in S_k
    execute T

S0 0

parallel foreach T in S_0
  recursive_execute T

Onde

recursive_execute T {
  atomic { if T.count++ < T.indeg then return }
  execute T
  parallel foreach T' in T.succ
    recursive_execute T'
}

e T.counté um contador simples que contém o número de predecessores Tjá executados, T.indego número de predecessores e T.succo conjunto de sucessores.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.