Sobes.tech
Junior — Middle

Vysvetlite, čo sú blokujúce volania v kontexte práce s gorutinami a ako ovplyvňujú vykonávanie programu

sobes.tech AI

Odpoveď od AI

Blokujúce volania sú operácie, ktoré pri vykonávaní zastavia (zablokujú) aktuálnu gorutinu, kým sa operácia nedokončí. V kontexte gorutín v Go, ak gorutina vykonáva blokujúce volanie, nebude pokračovať vo vykonávaní, kým sa volanie nedokončí.

Toto ovplyvňuje program tak, že ak sa blokujúce volanie vykonáva v hlavnej gorutine, tá bude čakať, čo môže viesť k oneskoreniam alebo zaseknutiu. Avšak vďaka tomu, že gorutiny sú ľahké a je ich možné spustiť veľa, blokujúce volania v jednej gorutine neblokujú vykonávanie iných gorutín.

Príklad blokujúceho volania je čítanie z kanála bez dostupných dát:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // odoslanie hodnoty
    }()
    val := <-ch // blokujúce volanie, čaká na prijatie hodnoty
    fmt.Println(val)
}

Tu operácia čítania z kanála blokuje gorutinu main, kým nedorazí hodnota.