Junior
რა არის WaitGroup-ი Go-ში და რა მიზნით გამოიყენება?
sobes.tech AI
პასუხი AI-სგან
WaitGroup — ეს არის სინქრონიზაციის მექანიზმი Go-ში, რომელიც საშუალებას აძლევს დაელოდო goroutine-ების ჯგუფის დასრულებას.
გამოყენება ხდება:
- ყველა goroutine-ის დასრულების მოლოდინით ფუნქციიდან ან პროგრამიდან გამოსვლის წინ.
- რამდენიმე goroutine-ის შორის მუშაობის კოორდინაციით.
გამოყენების მაგალითი:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // გიროსინდის დასრულებისას გამცირებს გამოთვლას
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-ით. უნდა გამოიძახოს ყოველი მონიტორინგის გოროტინების დაწყებამდე.Done(): ამცირებსWaitGroup-ის შიდა გამოთვლას 1-ით. ჩვეულებრივ, გამოიძახებაdefer-თან ერთად გოროტინში, რათა გარანტირებული იყოს გამოთვლის შემცირება პანიკის შემთხვევაშიც.Wait(): ბლოკავს მიმდინარე გოროტინს, სანამWaitGroup-ის შიდა გამოთვლა არ გახდება 0.