Junior
WaitGroup дар Go чист ва барои чӣ истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
WaitGroup — это механізм сінхранізацыі ў Go, які дазваляе чакаць завяршэння групы goroutines.
Выкарыстоўваецца для:
- Чакання завяршэння ўсіх goroutines перад выхадам з функцыі або праграмы.
- Каардынацыі працы паміж некалькімі goroutines.
Прыклад выкарыстання:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Змяншае лічыльнік пасля завяршэння goroutine
fmt.Printf("Працаўнік %d пачаў\n", id)
time.Sleep(time.Second) // Імітацыя працы
fmt.Printf("Працаўнік %d скончыў\n", id)
}
func main() {
var wg sync.WaitGroup // Аб'яўляем WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Павялічваем лічыльнік перад запуском кожнай goroutine
go worker(i, &wg)
}
wg.Wait() // Блакуе выкананне main, пакуль лічыльнік не стане 0
fmt.Println("Усе працаўнікі скончылі")
}
Асноўныя метады:
Add(delta int): Павялічвае ўнутраны лічыльнікWaitGroupнаdelta. Павінна быць выклікана перад запуском кожнай goroutine, якую трэба сачыць.Done(): Змяншае ўнутраны лічыльнікWaitGroupна 1. Звычайна выклікаецца зdeferунутры goroutine, каб гарантаваць змяншэнне нават у выпадку панікі.Wait(): Блакуе бягучую goroutine, пакуль унутраны лічыльнікWaitGroupне стане 0.