Maison > développement back-end > Golang > le corps du texte

Comment limiter efficacement les routines Go simultanées ?

Barbara Streisand
Libérer: 2024-11-02 05:25:02
original
778 Les gens l'ont consulté

How to Effectively Limit Concurrent Go Routines?

Limiter les routines Go simultanées

Dans votre code, vous tentez de limiter le nombre de goroutines simultanées. Cependant, la mise en œuvre actuelle ne fonctionne pas comme prévu. Voici une approche alternative :

Solution :

Au lieu de créer une goroutine pour chaque URL, créez un nombre fixe de travailleurs qui traitent les URL d'un canal partagé. Voici le code modifié :

<code class="go">parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()

// Workers get URLs from this channel
urls := make(chan string) 

// Feed the workers with URLs
go func() {
    for _, u := range flag.Args() {
        urls <- u
    }
    // Workers will exit from range loop when channel is closed
    close(urls)
}()

var wg sync.WaitGroup
client := rest.Client{}

results := make(chan string)

// Start the specified number of workers.
for i := 0; i < *parallel; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        for url := range urls {
            worker(url, client, results)
        }
    }()
}

// When workers are done, close results so that main will exit.
go func() {
    wg.Wait()
    close(results)
}()

for res := range results {
    fmt.Println(res)
}</code>
Copier après la connexion

Explication :

  • Une URL de canal mise en mémoire tampon est créée, qui fournira des URL aux travailleurs.
  • Une goroutine distincte est chargée d'alimenter le canal d'URL avec les URL fournies.
  • Le nombre souhaité de travailleurs est créé. Chaque travailleur extrait les URL du canal URL et les traite en série.
  • Lorsque tous les travailleurs ont terminé le traitement, une goroutine ferme le canal de résultats pour signaler que tous les résultats ont été récupérés.

Ceci Cette approche garantit qu'un maximum de goroutines parallèles sont actives à un moment donné, limitant ainsi la concurrence comme souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!