Junior — Middle
Kokiais atvejais užduotys gorutinose patenka į bendrą vykdymo planuotojo eilę?
sobes.tech AI
Atsakymas iš AI
Go kalbant, užduotys (goroutines) yra įtraukiamos į bendrąjį vykdymo planuotojo eilę (run queue) šiais atvejais:
- Kai gorutina sukuriama naudojant
goir yra pasiruošusi vykdyti, ji įtraukiama į planuotojo eilę. - Jei gorutina užblokuojama (pavyzdžiui, įvesties/išvesties operacijose, kanaluose ar sinchronizacijoje) ir vėliau atblokuojama, ji grįžta į eilę.
- Baigus dabartinę gorutina, planuotojas pasirenka kitą iš eilės.
Go planuotojas naudoja M:N modelį, kur M yra sisteminiai srautai, o N — goroutines. Yra daug goroutine, kurios paskirstomos per srautus per eilutes. Planuotojo eilė yra struktūra, kurioje saugomos paruoštos vykdyti goroutines.
Pavyzdys:
func main() {
go func() {
fmt.Println("Goroutine pradėta")
}()
time.Sleep(time.Second) // Laukiame, kol goroutine bus vykdoma
}
Čia, sukūrus, goroutine yra įtraukiama į planuotojo eilę vykdymui.