Sobes.tech
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-лер аяқталды")