Sobes.tech
Junior

Kas ir WaitGroup Go valodā un kam tas tiek izmantots?

sobes.tech AI

Atbilde no AI

WaitGroup ir sinhronizācijas mehānisms Go valodā, kas ļauj gaidīt, līdz grupa gorutīnu ir pabeigta.

Tas tiek izmantots:

  • Gaidīt, līdz visas gorutīnas ir pabeigušas, pirms iziet no funkcijas vai programmas.
  • Koordinēt darbu starp vairākām gorutīnām.

Piemērs lietošanai:

package main

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

func worker(id int, wg *sync.WaitGroup) {
	defer wg.Done() // Samazina skaitītāju, kad gorutīna ir pabeigta

	fmt.Printf("Darbinieks %d sāka\n", id)
	time.Sleep(time.Second) // Darba imitācija
	fmt.Printf("Darbinieks %d pabeidza\n", id)
}

func main() {
	var wg sync.WaitGroup // Deklarē WaitGroup
	numWorkers := 3

	for i := 1; i <= numWorkers; i++ {
		wg.Add(1) // Palielina skaitītāju pirms katras gorutīnas palaišanas
		go worker(i, &wg)
	}

	wg.Wait() // Bloķē main izpildi, līdz skaitītājs sasniedz 0
	fmt.Println("Visi darbinieki ir pabeiguši")
}

Galvenās metodes:

  • Add(delta int): Palielina WaitGroup iekšējo skaitītāju par delta. To vajadzētu izsaukt pirms katras uzraudzāmās gorutīnas palaišanas.
  • Done(): Samazina WaitGroup iekšējo skaitītāju par 1. Parasti tiek izsaukts ar defer gorutīnā, lai nodrošinātu skaitītāja samazināšanu pat panikas gadījumā.
  • Wait(): Bloķē pašreizējo gorutīnu, līdz WaitGroup iekšējais skaitītājs sasniedz 0.