Déploiement rapide : Guide d'application de Go WaitGroup dans les projets Golang
Introduction :
En programmation simultanée, attendre que toutes les goroutines terminent les tâches est une tâche courante. Go WaitGroup est un outil puissant dans Golang à cet effet. Cet article présentera les concepts de base de Go WaitGroup et fournira quelques exemples de code spécifiques pour aider les lecteurs à déployer et appliquer rapidement WaitGroup dans les projets Golang.
1. Qu'est-ce que WaitGroup ?
WaitGroup est une primitive de concurrence dans Golang, qui est utilisée pour attendre qu'un groupe de goroutines termine une tâche. Il propose principalement trois méthodes :
En utilisant ces trois méthodes ensemble, nous pouvons facilement attendre que toutes les tâches goroutines soient terminées, puis effectuer les opérations suivantes.
2. Exemples de code :
Afin de mieux comprendre les scénarios d'utilisation et d'application de WaitGroup, deux exemples de code spécifiques seront donnés ci-dessous.
Exemple 1 :
Dans cet exemple, nous utilisons WaitGroup pour attendre qu'un groupe de goroutines termine son exécution.
package main import ( "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup) { defer wg.Done() fmt.Printf("Worker %d starting ", id) // 模拟一些耗时的操作 for i := 0; i < 5; i++ { fmt.Printf("Worker %d working... ", id) } fmt.Printf("Worker %d finished ", id) } func main() { var wg sync.WaitGroup for i := 1; i <= 5; i++ { wg.Add(1) go worker(i, &wg) } wg.Wait() fmt.Println("All workers finished") }
Dans le code ci-dessus, nous définissons une fonction de travail pour simuler certaines opérations fastidieuses. Dans la fonction principale, nous utilisons une boucle pour créer 5 goroutines et ajoutons la goroutine en attente au WaitGroup en appelant wg.Add(1). Ensuite, une fois que chaque goroutine a terminé sa tâche, elle marque la tâche comme terminée en appelant wg.Done(). Enfin, appelez wg.Wait() dans la fonction principale pour attendre que toutes les goroutines soient terminées, puis affichez "Tous les travailleurs terminés".
Exemple 2 :
Dans cet exemple, nous utilisons WaitGroup et Channel pour implémenter la goroutine principale afin d'attendre que toutes les goroutines enfants terminent les tâches et agrégent les résultats.
package main import ( "fmt" "sync" ) func worker(id int, wg *sync.WaitGroup, result chan<- int) { defer wg.Done() fmt.Printf("Worker %d starting ", id) // 模拟一些耗时的操作 sum := 0 for i := 0; i < 5; i++ { sum += i } fmt.Printf("Worker %d finished, result: %d ", id, sum) result <- sum } func main() { var wg sync.WaitGroup result := make(chan int, 5) for i := 1; i <= 5; i++ { wg.Add(1) go worker(i, &wg, result) } wg.Wait() close(result) total := 0 for r := range result { total += r } fmt.Printf("All workers finished, total result: %d ", total) }
Dans le code ci-dessus, nous transmettons chaque résultat de calcul de goroutine à la goroutine principale via le canal de la fonction de travail, et résumons enfin tous les résultats dans la goroutine principale. En utilisant la combinaison de WaitGroup et de canal, nous pouvons implémenter de manière plus flexible l'attente des tâches goroutines et le résumé des résultats.
3. Résumé :
Go WaitGroup est un outil important pour implémenter l'attente de tâches simultanées dans Golang. Cet article donne deux exemples de code spécifiques pour aider les lecteurs à comprendre et à déployer rapidement l'application de WaitGroup dans les projets Golang. J'espère que les lecteurs pourront utiliser pleinement cet outil puissant pour améliorer les performances de concurrence et la fiabilité du projet.
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!