Sobes.tech
Junior

Go-da WaitGroup nədir və nə üçün istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

WaitGroup, Go dilində sinxronizasiya mexanizmi olub, qrup gorutinlərinin tamamlanmasını gözləməyə imkan verir.

İstifadə olunur:

  • Bütün gorutinlərin tamamlanmasını gözləmək və funksiya və ya proqramdan çıxmadan əvvəl.
  • Bir neçə gorutin arasında işin koordinasiyası.

İstifadə nümunəsi:

package main

import (
	"fmt"
	"sync"
	"time"
)

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Gorutina bitəndə sayğacı azaldır

	fmt.Printf("İşçi %d başladı\n", id)
	time.Sleep(time.Second) // İşin təqlidi
	fmt.Printf("İşçi %d bitirdi\n", id)
}

func main() {
	var wg sync.WaitGroup // WaitGroup elan edilir
	numWorkers := 3

	for i := 1; i <= numWorkers; i++ {
		wg.Add(1) // Hər gorutina başlamazdan əvvəl sayğacı artırır
		go worker(i, &wg)
	}

	wg.Wait() // Sayğac 0 olana qədər main-in icrasını bloklayır
	fmt.Println("Bütün işçilər tamamlandı")
}

Əsas metodlar:

  • Add(delta int): WaitGroup-un daxili sayğacını delta qədər artırır. Hər izləniləcək gorutina başlamazdan əvvəl çağırılmalıdır.
  • Done(): WaitGroup-un daxili sayğacını 1 azaldır. Adətən, gorutina daxilində defer ilə çağırılır ki, panik olsa belə sayğac azaldılsın.
  • Wait(): Mövcud gorutinanı bloklayır və WaitGroup-un daxili sayğacı 0 olana qədər gözləyir.