Golang WaitGroup

Golang WaitGroup
Golang WaitGroup lar deg blokkere en spesifikk kodeblokk for å la et sett med goroutines fullføre utførelsen. Et eksempel vil være å blokkere hovedfunksjonen til goroutinene er fullført og deretter fjerne blokkeringen av gruppen.

Eksempel 1

Ta et eksempel nedenfor:

pakkehoved
Importer "FMT"
funcrt ()
fmt.Println ("First Go rutine")

funcrt2 ()
fmt.Println ("Second Go Rutine")

FUNCMAIN ()
GO RT ()
GO RT2 ()

Hvis du kjører koden over, skriver programmet ingenting. Dette er fordi hovedfunksjonen avsluttes ved lansering av goroutines. Siden hovedfunksjonen er inngangspunktet for et GO -program, når det er slutt, slutter programmet.

For å håndtere en slik sak, kan vi bruke Golang WaitGroup. Ventegruppemetoden har tre hovedmetoder:

  1. Legg til () - Ventegruppen fungerer som en teller som holder antall funksjoner eller GO -rutiner for å vente på. Hvis telleren blir 0, slipper ventegruppen Goroutines. Vi bruker ADD -metoden for å legge til en spesifikk verdi til ventegruppen.
  2. Vent () - Ventemetoden blokkerer utførelsen til WaitGroup -telleren blir 0.
  3. Ferdig () - Reduserer ventegruppetelleren med en verdi av 1

La oss nå gjenskape det forrige eksemplet og bruke ventegruppe for å ta utførelsen på pause.

pakkehoved
import (
"FMT"
"Synkronisering"
)
FUNCRT (WG *SYNC.WaitGroup)
fmt.Println ("First Go rutine")
Utsatt.Ferdig () // Fjern goroutine fra waitgroup -telleren

FUNCRT2 (WG *SYNC.WaitGroup)
fmt.Println ("Second Go Rutine")
Utsatt.Gjort ()

FUNCMAIN ()
// Ny ventegruppe
WG: = Ny (synkronisering.WaitGroup)
// Legg til to GO -rutiner
wg.Legg til (2)
GO RT (WG)
GO RT2 (WG)
// Blokker utførelse til det er ferdig
wg.Vente()

Hvis vi kjører koden igjen, bør vi se en utdata som:

$ go run waitgroup.gå
Andre go rutine
Først gå rutine

Eksempel 2

Du kan også bruke ventegrupper med anonyme funksjoner. Et eksempel er som vist nedenfor:

pakkehoved
import (
"FMT"
"Synkronisering"
)
wg.Gjort ()
//
FUNCMAIN ()
varwgsync.WaitGroup
Fori: = 1; Jeg<= 5; i++
wg.Legg til (1)
i: = i
gofunc ()
Utsatt.Gjort ()
fmt.Printf ("Startrutine: %d \ n", i)
()

wg.Vente()

Eksemplet over illustrerer hvordan du bruker ventegrupper med en anonym funksjon. Koden over skal returnere:

Startrutine: 1
Startrutine: 3
Startrutine: 4
Startrutine: 5
Startrutine: 2

Konklusjon

I denne artikkelen dekket vi det grunnleggende om å jobbe med wainGroup -underpakken fra Sync -pakken i Go. WaitGroups lar deg pause utførelsen til en gruppe funksjoner eller goroutiner er ferdige.