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