Tenho n ~ = 1000 trabalhos em execução em servidores externos, cada um vinculado a uma rotina go em meu programa. Comecei os trabalhos em momentos diferentes, e eles terminam mais ou menos na ordem em que foram iniciados, mas isso não é garantido.
A partir de cada go-rotina, pesquiso seu trabalho de servidor correspondente: já está feito? Minhas solicitações de saída são limitadas por taxa, então preciso pesquisar com inteligência.
Quero priorizar a votação por rotinas go cujos trabalhos foram iniciados anteriormente. Do jeito que estou fazendo agora, tenho um canal que representa meu limite de taxa e todas as rotinas go esperam para adquirir um valor desse canal, sondar seu servidor e, em seguida, colocar um valor de volta.
Porém, não há garantia de que essas rotinas go seriam lidas aleatoriamente (muito menos em ordem de prioridade), porque o comportamento de várias rotinas go lendo no mesmo canal é indefinido.
Alguém poderia me orientar sobre como pensar sobre esse problema? Não precisa ser específico, mas não tenho certeza de quais primitivas e estruturas de dados eu usaria em Go para ler canais em ordem de prioridade, levando em consideração a limitação de taxa.
Parece difícil porque goroutines individuais não sabem o estado de todo o programa - quais rotinas de seus colegas foram iniciadas primeiro, etc. Eles devem meramente ser alimentados se devem ou não consultar seu servidor a qualquer momento.
Obrigado.
Você já ouviu falar de Filas justas ponderadas? Essa é uma maneira bem desenvolvida de agendar, de forma que uma previsão seja feita sobre qual trabalho deveria teoricamente ser concluído primeiro, e esse é aquele que é atendido.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras