Sobes.tech
Junior — Middle

Kas vyksta su gorutina, kai ji užstringa vykdant kokį nors procesą ar operaciją?

sobes.tech AI

Atsakymas iš AI

Kai gorutina Go kalba užstringa operacijoje (pavyzdžiui, skaitymas iš kanalo, sinchronizacijos laukimas, įvestis-išvestis), ji yra sustabdyta, ir Go planuotojas atlaisvina sisteminį siūlą kitų gorutinos vykdymui. Tai leidžia efektyviai naudoti sisteminius išteklius ir skalę paralelizmą.

Tai reiškia, kad blokuojanti operacija neužblokuoja viso OS siūlo, tik konkrečią gorutina. Planuotojas pereina prie kitų paruoštų gorutinos.

Pavyzdys:

ch := make(chan int)
func() {
    val := <-ch // gorutina blokuojama, kol gaus reikšmę
    fmt.Println(val)
}()
ch <- 42 // atrakina gorutina

Šiame pavyzdyje gorutina blokuojama skaitydama iš kanalo, tačiau planuotojas leidžia kitoms gorutinos dirbti, kol ji laukia.