Sobes.tech
Junior — Middle

Kako je izvršavanje goroutine povezano sa nitima procesora i kako se dodeljuje na određenu nit?

sobes.tech АИ

Одговор од АИ

U Go, goroutine-ji su lagani niti koje upravlja Go runtime, a ne direktno operativni sistem. Oni se izvršavaju unutar niti operativnog sistema, ali Go koristi sopstvenog planera koji raspoređuje mnoge goroutine-ove na ograničen broj niti (M — niti OS-a).

Dodeljivanje goroutine-a niti vrši se putem M:N modela, gde je M broj niti OS-a, a N broj goroutine-ova. Go planer dinamički prebacuje izvršavanje goroutine-ova između niti kako bi efikasno koristio resurse procesora.

Na taj način, goroutine nije vezana za određenu procesorsku nit, već odluku o tome na kojoj niti i kada će biti izvršena donosi Go planer. Ovo omogućava pokretanje hiljada goroutine-ova sa minimalnim troškovima u poređenju sa niti OS-a.

Primer:

func main() {
    go func() {
        fmt.Println("Goroutine radi")
    }()
    time.Sleep(time.Second)
}

Ovde se goroutine pokreće, a Go planer će joj dodeliti izvršenje na jednoj od dostupnih niti OS-a.