Sobes.tech
Senior

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.