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