Sobes.tech
Junior — Middle

Cum se realizează echilibrarea execuției goroutine-urilor într-un program?

sobes.tech AI

Răspuns de la AI

Echilibrul executării goroutine-urilor în Go este realizat de planificatorul (scheduler) încorporat în runtime. Planificatorul distribuie goroutine-urile între firele de sistem disponibile (threads OS), utilizând un model M:N, unde M reprezintă numărul de fire, iar N numărul de goroutine-uri.

Puncte cheie:

  • Există multe goroutine-uri, sunt ușoare și se comută între ele fără implicarea sistemului de operare.
  • Planificatorul folosește algoritmi similari cu multitasking-ul cooperativ, dar cu posibilitatea de întrerupere.
  • Goroutine-urile sunt alocate firelor, iar dacă o goroutine se blochează (de exemplu, la intrare/ieșire), planificatorul trece la alta.

Exemplu:

func main() {
    for i := 0; i < 10; i++ {
        go func(id int) {
            fmt.Println("Goroutine", id)
        }(i)
    }
    time.Sleep(time.Second) // Așteaptă finalizarea goroutine-urilor
}

Aici, planificatorul va distribui 10 goroutine-uri între firele disponibile, asigurând un echilibru și o utilizare eficientă a CPU-ului.