Sobes.tech
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á.