Sobes.tech
Junior — Middle

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.