Sobes.tech
Middle+

Mi a goroutine, és hogyan van felépítve belülről?

sobes.tech MI

Válasz az MI-től

A goroutine-ok könnyű végrehajtási szálak Go-ban, amelyeket a nyelv futásideje kezel, nem pedig az operációs rendszer. A rendszer szálaktól eltérően a goroutine-ok nagyon kicsi veremmel rendelkeznek (néhány kilobájttal kezdődnek), és dinamikusan bővíthetők.

Egy goroutine belsejében a g struktúrával van ábrázolva, amely tartalmazza az állapotot, a veremot, a regisztereket és más információkat. A Go ütemezője (scheduler) kezeli a goroutine-ok közötti váltást egy M:N modell segítségével, ahol M a rendszer szálak (OS szálak), N pedig a goroutine-ok.

Az ütemező elosztja a goroutine-okat a rendszer szálak között, lehetővé téve a hatékony többprocesszoros használatot anélkül, hogy extra költségek merülnének fel az OS szálak létrehozásában és váltásában. Ez a runtime-ben történő kooperatív és preemptív multitasking révén valósul meg.

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

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

func main() {
    go sayHello() // goroutine indítása
    time.Sleep(time.Second) // időt adunk a goroutine-nak a végrehajtáshoz
}