"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como limitar a execução simultânea de gorrotinas no Go?

Como limitar a execução simultânea de gorrotinas no Go?

Publicado em 2024-11-10
Navegar:443

How to Limit Concurrent Goroutine Execution in Go?

Limitando a execução simultânea de goroutines

Considere um cenário em que você tem uma lista de URLs para processar e deseja limitar o número de goroutines simultâneas em execução . Por exemplo, se você tiver 30 URLs, você pode querer apenas 10 goroutines trabalhando em paralelo.

O código fornecido tenta usar um canal em buffer de tamanho parallel para limitar o número de goroutines em execução . No entanto, esta abordagem não parece bloquear após o processamento de todos os URLs. Uma maneira mais eficaz de atingir essa limitação de simultaneidade é criar um número específico de goroutines de trabalho e alimentá-las com URLs por meio de um canal dedicado.

Aqui está uma versão melhorada do código:

parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()
urls := flag.Args()

// Create a channel to hold URLs that workers will consume
workerURLChan := make(chan string)

// Start a goroutine to feed URLs to the workers
go func() {
    for _, u := range flag.Args() {
        workerURLChan 

Neste código atualizado, criamos uma goroutine de trabalho para cada execução simultânea permitida, e esses trabalhadores buscam URLs do canal dedicado. Depois que todos os URLs forem distribuídos, o trabalhadorURLChan será fechado, o que aciona a saída dos trabalhadores quando o URL atual for concluído. Este mecanismo limita efetivamente o número de goroutines simultâneas em execução.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3