Junior
Go tilida WaitGroup nima va u nima uchun ishlatiladi?
sobes.tech AI
AIdan javob
WaitGroup — bu Go dasturida sinxronizatsiya mexanizmi bo‘lib, u gorutinlar guruhining yakunlanishini kutishga imkon beradi.
U quyidagilar uchun ishlatiladi:
- Barcha gorutinlar tugashini kutish va funksiyadan yoki dasturdan chiqishdan oldin.
- Bir nechta gorutinlar o‘rtasida ishni muvofiqlashtirish.
Foydalanish misoli:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Gorutin tugaganidan so‘ng hisoblagichni kamaytiradi
fmt.Printf("Ishchi %d ish boshladi\n", id)
time.Sleep(time.Second) // Ishni taqlid qilish
fmt.Printf("Ishchi %d ishni tugatdi\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup e’lon qilamiz
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Har bir gorutinni ishga tushirishdan oldin hisoblagichni oshiramiz
go worker(i, &wg)
}
wg.Wait() // hisoblagich 0 bo‘lgunga qadar mainni bloklaydi
fmt.Println("Barcha ishchilar tugatdi")
}
Asosiy metodlar:
Add(delta int):WaitGroupning ichki hisoblagichinideltaga oshiradi. Har bir kuzatiladigan gorutinni ishga tushirishdan oldin chaqirilishi kerak.Done():WaitGroupning ichki hisoblagichini 1 ga kamaytiradi. Odatda, gorutin ichidadeferbilan chaqiriladi, shunda panik bo‘lsa ham hisoblagich kamaytiriladi.Wait(): Hozirgi gorutinni bloklaydi, hisoblagich 0 ga yetguncha.