Cum are loc distribuirea celor patru goroutines pe cele patru nuclee ale procesorului la pornire?
sobes.tech AI
Răspuns de la AI
În Go, planificatorul de goroutines (Goroutine scheduler) distribuie goroutine-urile între firele de sistem (M), care la rândul lor sunt legate de nucleele procesorului.
Dacă ai 4 goroutine și 4 nuclee de procesor, la pornirea planificatorului, acesta poate distribui fiecare goroutine pe un nucleu diferit, asigurând execuție paralelă. Acest lucru este posibil dacă variabila de mediu GOMAXPROCS este setată la 4 (în versiunile moderne de Go, este egală cu numărul de nuclee disponibile).
Exemplu:
runtime.GOMAXPROCS(4) // setează numărul de fire disponibile la 4
for i := 0; i < 4; i++ {
go func(id int) {
fmt.Printf("Goroutine %d a fost pornită\n", id)
// muncă
}(i)
}
Planificatorul Go va distribui goroutine-urile pe fire, care pot fi executate pe diferite nuclee, ceea ce permite utilizarea eficientă a sistemelor multiprocesor. Totuși, distribuția exactă depinde de încărcarea sistemului și de planificatorul intern.