Maison > Article > développement back-end > Pratique du projet : utiliser Go WaitGroup pour améliorer les performances de concurrence Golang
Projet pratique : Utiliser Go WaitGroup pour améliorer les performances de concurrence de Golang
Résumé :
À l'ère d'Internet d'aujourd'hui, le traitement à haute concurrence est devenu un problème qui ne peut être ignoré dans le développement de divers systèmes. En tant que langage de programmation prenant en charge une concurrence efficace, Golang possède de riches fonctionnalités de programmation simultanée. Cet article explique comment utiliser Go WaitGroup pour améliorer les performances de concurrence de Golang grâce à des scénarios de projet réels. En utilisant des exemples de code spécifiques comme indices, les lecteurs sont invités à utiliser WaitGroup pour implémenter le traitement de tâches simultanées dans un combat réel.
Mots clés :
Golang ; performances de concurrence ; WaitGroup ; combats réels ; exemples de code
3.1 Initialiser WaitGroup
Dans le thread principal, vous devez d'abord initialiser un objet WaitGroup. L'objet WaitGroup compte le nombre de tâches en attente via la méthode Add.
var wg sync.WaitGroup
3.2 Ajout de tâches
Dans les tâches simultanées, des tâches spécifiques doivent être effectuées dans goroutine, et une fois la tâche terminée, la tâche est marquée comme terminée via la méthode Terminé.
wg.Add(1) // 增加一个任务计数 go func() { defer wg.Done() // 标记任务完成 // 执行具体任务 }()
3.3 En attente de la fin de la tâche
Le thread principal attend que toutes les tâches soient terminées en appelant la méthode Wait.
wg.Wait()
package main import ( "fmt" "io/ioutil" "net/http" "sync" ) func main() { urls := []string{"https://www.example.com/1", "https://www.example.com/2", "https://www.example.com/3"} var wg sync.WaitGroup for _, url := range urls { wg.Add(1) go func(url string) { defer wg.Done() resp, err := http.Get(url) if err != nil { fmt.Printf("Failed to fetch %s: %v ", url, err) return } body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { fmt.Printf("Failed to read response body from %s: %v ", url, err) return } err = ioutil.WriteFile("data/"+url, body, 0644) if err != nil { fmt.Printf("Failed to write file for %s: %v ", url, err) } }(url) } wg.Wait() fmt.Println("All tasks completed.") }
Dans l'exemple de code ci-dessus, nous utilisons WaitGroup pour implémenter le traitement simultané du téléchargement de données à partir de plusieurs URL. Augmentez le nombre de tâches via la méthode Add, marquez l'achèvement de la tâche via la méthode Done et attendez que toutes les tâches soient exécutées via la méthode Wait. De cette façon, nous pouvons gérer efficacement les tâches simultanées.
Références :
【Nombre de mots d'article : 495】
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!