Sobes.tech
Junior — Middle

Hogyan történik a négy goroutine elosztása a négy processzormagon indításkor?

sobes.tech MI

Válasz az MI-től

Go-ban a goroutine ütemező (Goroutine scheduler) a goroutine-okat a rendszer szálakra (M) osztja szét, amelyek viszont a processzor magjaihoz vannak kötve.

Ha 4 goroutine-od és 4 processzor magod van, az ütemező indításakor minden goroutine-ot külön magra oszthat, így párhuzamos végrehajtást biztosítva. Ez akkor lehetséges, ha a GOMAXPROCS környezeti változó értéke 4-re van állítva (a modern Go verziókban alapértelmezés szerint a rendelkezésre álló magok számával egyezik meg).

Példa:

runtime.GOMAXPROCS(4) // beállítja a rendelkezésre álló szálak számát 4-re

for i := 0; i < 4; i++ {
    go func(id int) {
        fmt.Printf("Goroutine %d elindult\n", id)
        // munka
    }(i)
}

A Go ütemező a goroutine-okat szétosztja olyan szálak között, amelyek különböző magokon futtathatók, ez hatékonyan kihasználja a multiprocesszoros rendszereket. Azonban a pontos elosztás a rendszer terhelésétől és a belső ütemezőtől függ.