Maison >développement back-end >Golang >Comment puis-je contrôler le nombre de Goroutines simultanées dans Go ?
Contrôler le nombre de goroutines simultanées
L'exécution d'une multitude de goroutines simultanément peut améliorer les performances de programmes correctement conçus. Cependant, dans certains scénarios, il devient nécessaire de limiter le nombre de goroutines exécutées simultanément. Cet article explique comment gérer le nombre de goroutines qui s'exécutent à un moment donné.
Parallélisme limité
Le modèle « Parallélisme limité », tel que décrit dans Go Concurrency L'article Patterns fournit une solution pour limiter le nombre de goroutines simultanées. Ce modèle utilise un canal avec une capacité limitée pour contrôler le nombre de goroutines pouvant s'exécuter simultanément.
Exemple de mise en œuvre
Considérez l'exemple suivant, où nous devons maintenir un maximum de 10 goroutines simultanées pour traiter un grand nombre de tâches :
package main import "fmt" func main() { maxGoroutines := 10 guard := make(chan struct{}, maxGoroutines) // Capacity of the channel limits concurrent goroutines for i := 0; i < 30; i++ { guard <- struct{}{} // Blocking operation to prevent exceeding the limit go func(n int) { worker(n) <-guard // Release the guard when the worker completes }(i) } } func worker(i int) { fmt.Println("doing work on", i) }
Dans cette implémentation, le canal de garde fait office de facteur limitant. Lorsque le nombre de goroutines simultanées atteint la capacité maximale du canal (10), le canal de garde empêche le démarrage de nouvelles goroutines. Une fois qu'une goroutine en cours d'exécution est terminée, elle libère la garde en recevant du canal, permettant à une nouvelle goroutine de s'exécuter.
Conclusion
En utilisant le modèle de « parallélisme limité » et un canal à capacité limitée, il est possible de contrôler le nombre de goroutines simultanées, garantissant ainsi qu'un maximum souhaité est constamment maintenu. Cette approche fournit un moyen structuré et efficace de gérer le parallélisme dans les programmes Go.
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!