Sobes.tech
Junior — Middle

Vysvětlete, co jsou blokující volání v kontextu práce s gorutinami a jak ovlivňují provádění programu

sobes.tech AI

Odpověď od AI

Blokující volání jsou operace, které při provádění zastaví (zablokují) aktuální gorutinu, dokud se operace nezavrší. V kontextu gorutin v Go, pokud gorutina provádí blokující volání, nebude pokračovat v provádění, dokud se volání nezavrší.

To ovlivňuje program tak, že pokud se blokující volání provádí v hlavní gorutině, ta bude čekat, což může vést ke zpožděním nebo zaseknutí. Nicméně díky tomu, že gorutiny jsou lehké a lze jich spustit mnoho, blokující volání v jedné gorutinu nezablokují provádění jiných gorutin.

Příklad blokujícího volání je čtení z kanálu bez dostupných dat:

ch := make(chan int)

func main() {
    go func() {
        ch <- 42 // odeslání hodnoty
    }()
    val := <-ch // blokující volání, čeká na přijetí hodnoty
    fmt.Println(val)
}

Zde operace čtení z kanálu blokuje gorutinu main, dokud nedorazí hodnota.