Sobes.tech
Junior — Middle

Hogyan történik a goroutine-ok elosztása a végrehajtó szálak között?

sobes.tech MI

Válasz az MI-től

Go-ban a goroutine-ok elosztása a végrehajtási szálak (OS szálak) között a runtime-ba épített ütemező segítségével történik. A goroutine egy könnyű korutina, amely nem felel meg közvetlenül egy OS-szálnak.

A Go ütemezője egy M:N modellt használ, ahol M az OS szálak száma, N pedig a goroutine-ok száma. Dinamikusan társítja a goroutine-okat a szálakhoz, hogy hatékonyan kihasználja a rendszer erőforrásait.

Fő komponensek:

  • G (goroutine) — maga a goroutine.
  • M (gép) — az OS szál.
  • P (processzor) — a logikai processzor, amely irányítja a goroutine-ok végrehajtását.

Folyamat:

  1. Egy P-t rendelnek egy goroutine-hoz.
  2. A P kapcsolódik egy M-hez (OS szál).
  3. Az M végrehajtja a goroutine-ot.

Ha a goroutine blokkolódik (például rendszerhívásnál), az ütemező átállhat egy másik goroutine-ra egy másik szálon, hogy elkerülje a kihasználatlanságot.

Így a goroutine-ok elosztása a szálak között automatikusan és a fejlesztő számára átlátható módon történik, magas konkurenciát és skálázhatóságot biztosítva.

Goroutine létrehozásának példája:

 go func() {
    fmt.Println("Helló a goroutine-ból")
}()

Itt a ütemező eldönti, melyik OS szálon futtatja ezt a goroutine-t.