Junior — Middle
Co se stane s gorutinou, když se zablokuje při provádění nějakého procesu nebo operace?
sobes.tech AI
Odpověď od AI
Když se goroutine v Go zablokuje na operaci (například čtení z kanálu, čekání na synchronizaci, vstup-výstup), je pozastavena a plánovač Go uvolní systémový vlákno pro vykonávání jiných gorutin. To umožňuje efektivně využívat systémové zdroje a škálovat paralelismus.
To znamená, že blokující operace nezablokuje celé vlákno OS, pouze konkrétní gorutinu. Plánovač přepne na jiné gorutiny, které jsou připravené k vykonání.
Příklad:
ch := make(chan int)
func() {
val := <-ch // gorutina se zablokuje, dokud nedostane hodnotu
fmt.Println(val)
}()
ch <- 42 // odblokuje gorutinu
V tomto příkladu se gorutina zablokuje při čtení z kanálu, ale plánovač umožní jiným gorutinám pracovat, zatímco ona čeká.