Sobes.tech
Junior — Middle

Hogyan történik a goroutine-ok végrehajtásának kiegyensúlyozása egy programban?

sobes.tech MI

Válasz az MI-től

A Go-ban a goroutine-ok végrehajtásának kiegyensúlyozását a beépített ütemező (scheduler) végzi, amely a runtime része. Az ütemező elosztja a goroutine-okat a rendelkezésre álló rendszer szálak (OS threads) között, M:N modell szerint, ahol M a szálak száma, N pedig a goroutine-ok száma.

Főbb pontok:

  • Sok goroutine van, könnyűek, és az ütemező között váltogatnak az OS beavatkozása nélkül.
  • Az ütemező olyan algoritmusokat használ, amelyek hasonlítanak a kooperatív multitaskolásra, de lehetőséget adnak megszakításra.
  • A goroutine-ok szálakhoz vannak rendelve, és ha egy goroutine blokkolódik (pl. bemenet/kimenet), az ütemező másikra vált.

Példa:

func main() {
    for i := 0; i < 10; i++ {
        go func(id int) {
            fmt.Println("Goroutine", id)
        }(i)
    }
    time.Sleep(time.Second) // Várakozás a goroutine-ok befejezésére
}

Ebben a példában az ütemező 10 goroutine-t oszt szét a rendelkezésre álló szálak között, biztosítva az egyensúlyt és a CPU hatékony kihasználását.