Sobes.tech
Junior — Middle

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.