Mi az a gorutina? Miben különbözik egy rendszer szálától? Mesélj a Go ütemezőről (GMP).
sobes.tech MI
Válasz az MI-től
A goroutine egy könnyű végrehajtási szál a Go nyelvben, amelyet a Go futásideje kezel, nem pedig az operációs rendszer. A rendszer szálaktól eltérően a goroutine-ok sokkal kisebb veremmérettel rendelkeznek (néhány kilobájttal kezdődnek, és dinamikusan növekedhetnek), lehetővé téve ezer vagy akár millió goroutine egyidejű futtatását alacsony overhead mellett.
A rendszer szálakat az operációs rendszer hozza létre és ütemezi, fix nagy veremmel rendelkeznek, és drágább kontextusváltási műveleteket végeznek.
A Go ütemezője a GMP modellt követi:
- G (goroutine) — maga a goroutine, végrehajtási egység.
- M (gép) — rendszer szál (OS szál), amelyen a goroutine-ok futnak.
- P (processzor) — logikai processzor, erőforrás, amely szükséges a goroutine végrehajtásához M-n.
A P kezeli a kész goroutine-ok (G) sorát. M csak egy goroutine-t tud egyszerre végrehajtani, de a több M és P megléte révén az ütemező hatékonyan osztja szét a goroutine-okat a rendszer szálak között, biztosítva a versenyt és a párhuzamosságot.
Ez a megközelítés lehetővé teszi a Go számára, hogy hatékonyan használja a rendszer erőforrásait és skálázható legyen többprocesszoros rendszereken.