Maison  >  Article  >  développement back-end  >  Déploiement rapide : guide d'application de Go WaitGroup dans les projets Golang

Déploiement rapide : guide d'application de Go WaitGroup dans les projets Golang

王林
王林original
2023-09-27 09:01:09644parcourir

快速部署:Go WaitGroup在Golang项目中的应用指南

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 :

  1. Add : ajoutez une goroutine en attente à WaitGroup.
  2. Terminé : marque une tâche goroutine en attente comme terminée.
  3. Attendez : attendez que toutes les goroutines en attente terminent leurs tâches.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn