Junior — Middle
Kaip įgyvendinti sinchroninį kelių paralelinių užduočių užbaigimo laukimą Go programoje?
sobes.tech AI
Atsakymas iš AI
Go kalboje dažniausiai naudojamas sync.WaitGroup sinchroniniam kelių paralelinių užduočių laukimui. Tai leidžia paleisti kelias gorutinas ir laukti jų užbaigimo.
Pavyzdys:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Informuoja WaitGroup, kad užduotis baigta
fmt.Printf("Darbininkas %d pradėjo\n", id)
// darbo imitacija
// time.Sleep(time.Second)
fmt.Printf("Darbininkas %d baigė\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Nustato užduočių skaičių
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Laukia, kol visi gorutinai baigsis
fmt.Println("Visi darbininkai baigėsi")
}
Taip WaitGroup leidžia efektyviai sinchronizuoti paralelinių užduočių vykdymą.