Junior — Middle
Čo sa deje s gorutinou, keď sa zablokuje pri vykonávaní nejakého procesu alebo operácie?
sobes.tech AI
Odpoveď od AI
Keď sa goroutine v Go zablokuje na operácii (napríklad čítanie z kanála, čakanie na synchronizáciu, vstup-výstup), je pozastavená a plánovač Go uvoľní systémové vlákno na vykonávanie iných goroutine. To umožňuje efektívne využívanie systémových zdrojov a škálovanie paralelizmu.
To znamená, že blokujúca operácia nezablokuje celé vlákno OS, iba konkrétnu goroutine. Plánovač prepne na iné goroutine, ktoré sú pripravené na vykonanie.
Príklad:
ch := make(chan int)
func() {
val := <-ch // goroutine sa zablokuje, kým nedostane hodnotu
fmt.Println(val)
}()
ch <- 42 // odblokuje goroutine
V tomto príklade sa goroutine zablokuje pri čítaní z kanála, ale plánovač umožní iným goroutine pracovať, zatiaľ čo ona čaká.