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