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.