Junior
Kas ir WaitGroup Go valodā un kam tas tiek izmantots?
sobes.tech AI
Atbilde no AI
WaitGroup ir sinhronizācijas mehānisms Go valodā, kas ļauj gaidīt, līdz grupa gorutīnu ir pabeigta.
Tas tiek izmantots:
- Gaidīt, līdz visas gorutīnas ir pabeigušas, pirms iziet no funkcijas vai programmas.
- Koordinēt darbu starp vairākām gorutīnām.
Piemērs lietošanai:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Samazina skaitītāju, kad gorutīna ir pabeigta
fmt.Printf("Darbinieks %d sāka\n", id)
time.Sleep(time.Second) // Darba imitācija
fmt.Printf("Darbinieks %d pabeidza\n", id)
}
func main() {
var wg sync.WaitGroup // Deklarē WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Palielina skaitītāju pirms katras gorutīnas palaišanas
go worker(i, &wg)
}
wg.Wait() // Bloķē main izpildi, līdz skaitītājs sasniedz 0
fmt.Println("Visi darbinieki ir pabeiguši")
}
Galvenās metodes:
Add(delta int): PalielinaWaitGroupiekšējo skaitītāju pardelta. To vajadzētu izsaukt pirms katras uzraudzāmās gorutīnas palaišanas.Done(): SamazinaWaitGroupiekšējo skaitītāju par 1. Parasti tiek izsaukts ardefergorutīnā, lai nodrošinātu skaitītāja samazināšanu pat panikas gadījumā.Wait(): Bloķē pašreizējo gorutīnu, līdzWaitGroupiekšējais skaitītājs sasniedz 0.