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.