Akými spôsobmi sa vykonáva kontrola a koordinácia práce goroutine v Go?
sobes.tech AI
Odpoveď od AI
V jazyku Go je riadenie a koordinácia goroutine realizovaná viacerými spôsobmi:
-
Kanály (channels) — hlavný mechanizmus na výmenu dát a synchronizáciu medzi goroutine. Kanály umožňujú bezpečne prenášať hodnoty a blokujú odosielateľa alebo príjemcu, kým nie sú pripravení.
-
sync.WaitGroup — slúži na čakanie na dokončenie skupiny goroutine. Umožňuje hlavnej goroutine čakať, kým všetky spustené goroutine neskončia.
-
Kontext (context.Context) — sa používa na riadenie životnosti goroutine, prenášanie signálov zrušenia a časových limitov.
-
Muteksy a ďalšie primitívy z balíka sync — na ochranu zdieľaných zdrojov a prevenciu závodov.
Príklad s WaitGroup a kanálom:
var wg sync.WaitGroup
ch := make(chan int)
wg.Add(1)
go func() {
defer wg.Done()
ch <- 42 // odoslanie hodnoty
}()
go func() {
val := <-ch // prijatie hodnoty
fmt.Println(val)
}()
wg.Wait() // čakanie na dokončenie
Týmto spôsobom kombinácia kanálov a primitives synchronizácie umožňuje efektívne riadiť paralelné vykonávanie goroutine.