Junior — Middle
შეგიძლიათ ახსნათ, როგორ მუშაობს გოსთან მრავალი გორუტინის დასრულების მოლოდინის მექანიზმი WaitGroup-ის გამოყენებით?
sobes.tech AI
პასუხი AI-სგან
Go-да, бер неше goroutine-нің аяқталуын күту үшін sync.WaitGroup түрі пайдаланылады. Бұл бірнеше goroutine-ге "жазылуға" мүмкіндік береді және барлық аяқталғанша орындалуды бұғаттайды.
WaitGroup-тің негізгі әдістері:
- Add(n int) — есептегішті n-ге арттырады, әдетте goroutine-лерді іске қоспас бұрын шақырылады.
- Done() — есептегішті 1-ге кемітеді, әр goroutine-нің соңында шақырылады.
- Wait() — есептегіш 0-ге жеткенше орындалуды бұғаттайды.
Қолдану мысалы:
var wg sync.WaitGroup
wg.Add(3) // 3 goroutine-ді күтеміз
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // аяқталуын белгілейміз
fmt.Printf("Goroutine %d жұмыс істеп жатыр\n", id)
// кейбір жұмыс
}(i)
}
wg.Wait() // барлық goroutine-лер аяқталғанша күтеміз
fmt.Println("Барлық goroutine-лер аяқталды")