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.