Sobes.tech
Junior — Middle

U kojim slučajevima zadaci u gorutinama se smeštaju u zajedničku red čekanja planera izvršenja?

sobes.tech АИ

Одговор од АИ

U Go-u, zadaci (goroutine-ji) se postavljaju u opštu red planera za izvršenje (run queue) u sledećim slučajevima:

  • Kada se goroutine kreira pomoću go i spremna je za izvršenje, ona se stavlja u red planera.
  • Ako se goroutine blokira (npr. na operacijama ulaza-izlaza, kanalima ili sinhronizaciji) i zatim odblokira, vraća se u red.
  • Kada se trenutna goroutine završi, planer bira sledeću iz reda.

Planer Go koristi model M:N, gde su M sistemski niti, a N goroutine-ji. Postoji mnogo goroutine-ja, koji se raspoređuju po nitima putem redova. Red planera je struktura u kojoj se čuvaju spremne za izvršenje goroutine-ji.

Primer:

func main() {
    go func() {
        fmt.Println("Goroutine pokrenuta")
    }()
    time.Sleep(time.Second) // Čekamo da goroutine izvrši
}

Ovde, nakon kreiranja, goroutine se postavlja u red planera za izvršenje.