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.