Junior — Middle
Mida juhtub gorutinaaga, kui see blokeerub mingi protsessi või operatsiooni täitmisel?
sobes.tech AI
Vastus AI-lt
Kui Go-s goroutine blokeerub operatsiooni (näiteks kanali lugemine, sünkroniseerimise ooteaeg, sisend-väljund), see peatub ja Go planeerija vabastab süsteemilise niidi teiste goroutine'ide täitmiseks. See võimaldab tõhusalt kasutada süsteemi ressursse ja skaleerida paralleelsust.
See tähendab, et blokeeriv operatsioon ei blokeeri kogu OS-niiti, vaid ainult konkreetset goroutine'i. Planeerija vahetab teistele valmisolevatele goroutine'idele.
Näide:
ch := make(chan int)
func() {
val := <-ch // goroutine blokeerub, kuni saab väärtuse
fmt.Println(val)
}()
ch <- 42 // vabastab goroutine'i
Selles näites blokeerub goroutine kanali lugemisel, kuid planeerija võimaldab teistele goroutine'idele töötada, kuni ta ootab.