Maison >développement back-end >Golang >Comment surveiller et contrôler efficacement le nombre de Goroutines actives dans Go ?
Dans un scénario où vous avez une file d'attente avec des opérations simultanées, il devient essentiel de surveiller le nombre de goroutines actives. Cela garantit que le nombre approprié de goroutines gère la file d'attente, optimisant ainsi les performances et l'utilisation des ressources.
L'extrait de code fourni montre une boucle qui génère des goroutines en fonction du nombre d'éléments dans une file d'attente. Cependant, cette approche présente plusieurs inconvénients :
Une meilleure solution consiste à utiliser un mécanisme de synchronisation. Ici, un WaitGroup est utilisé :
func deen(wg *sync.WaitGroup, queue chan int) { for element := range queue { wg.Done() fmt.Println("element is ", element) if element%2 == 0 { fmt.Println("new element is ", element) wg.Add(2) queue <- (element*100 + 11) queue <- (element*100 + 33) } } } func main() { var wg sync.WaitGroup queue := make(chan int, 10) queue <- 1 queue <- 2 queue <- 3 queue <- 0 for i := 0; i < 4; i++ { wg.Add(1) go deen(&wg, queue) } wg.Wait() close(queue) fmt.Println("list len", len(queue)) //this must be 0 }
Ce code révisé garantit que le nombre de goroutines est toujours limité à quatre et termine le traitement une fois que tous les éléments de la file d'attente ont été traités. Cette approche résout efficacement le problème de la création excessive de goroutines et de la consommation CPU.
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!