"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment limiter l’exécution simultanée de Goroutine dans Go ?

Comment limiter l’exécution simultanée de Goroutine dans Go ?

Publié le 2024-11-10
Parcourir:187

How to Limit Concurrent Goroutine Execution in Go?

Limiter l'exécution simultanée de goroutines

Considérez un scénario dans lequel vous disposez d'une liste d'URL à traiter et souhaitez limiter le nombre de goroutines simultanées en cours d'exécution. . Par exemple, si vous avez 30 URL, vous souhaiterez peut-être que seulement 10 goroutines fonctionnent en parallèle.

Le code fourni tente d'utiliser un canal tampon de taille parallèle pour limiter le nombre de goroutines en cours d'exécution. . Cependant, cette approche ne semble pas bloquer après le traitement de toutes les URL. Un moyen plus efficace d'atteindre cette limitation de concurrence consiste à créer un nombre spécifié de goroutines de travail et à leur fournir des URL via un canal dédié.

Voici une version améliorée du code :

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 

Dans ce code mis à jour, nous créons une goroutine de travail pour chaque exécution simultanée autorisée, et ces travailleurs récupèrent les URL du canal dédié. Une fois que toutes les URL ont été distribuées, le workerURLChan est fermé, ce qui déclenche la fermeture des Workers lorsque leur URL actuelle est terminée. Ce mécanisme limite efficacement le nombre de goroutines simultanées en cours d'exécution.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3