Sobes.tech
Junior

Go'da WaitGroup nedir ve ne için kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

WaitGroup, Go dilinde senkronizasyonu sağlayan bir mekanizmadır ve bir grup goroutine'nin tamamlanmasını beklemeye olanak tanır.

Kullanım alanları:

  • Tüm goroutine'lerin tamamlanmasını beklemek ve fonksiyon veya programdan çıkmadan önce.
  • Birden fazla goroutine arasında çalışma koordinasyonu.

Kullanım örneği:

package main

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

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Goroutine tamamlandığında sayacı azaltır

	fmt.Printf("Çalışan %d başladı\n", id)
	time.Sleep(time.Second) // İşlem taklidi
	fmt.Printf("Çalışan %d bitti\n", id)
}

func main() {
	var wg sync.WaitGroup // WaitGroup tanımlanır
	numWorkers := 3

	for i := 1; i <= numWorkers; i++ {
		wg.Add(1) // Her goroutine başlamadan önce sayacı artırır
		go worker(i, &wg)
	}

	wg.Wait() // Sayıç 0 olana kadar main'in çalışmasını engeller
	fmt.Println("Tüm çalışanlar tamamlandı")
}

Ana metodlar:

  • Add(delta int): WaitGroup'un iç sayacını delta kadar artırır. Takip edilmek istenen her goroutine'den önce çağrılmalıdır.
  • Done(): WaitGroup'un iç sayacını 1 azaltır. Genellikle goroutine içinde defer ile çağrılır, böylece panik olsa bile sayacın azaltılması garanti edilir.
  • Wait(): WaitGroup'un iç sayacı 0 olana kadar çağıran goroutine'i engeller.