Middle+
Kaip struktūruotos gorutinos ir kiek atminties jos užima steke?
sobes.tech AI
Atsakymas iš AI
Gorutina yra lengvas vykdymo srautas, kurį valdo Go vykdymo aplinka (runtime). Jos daugiausia multiplexuojamos mažesniame sisteminių srautų (gijų baseine) skaičiuje.
Pagrindiniai komponentai:
- Stekas: Kiekviena gorutina turi atskirą, išplečiamą steką. Iš pradžių jis yra mažas (16KB su Go 1.4+, anksčiau 8KB), gali būti didinamas arba mažinamas pagal poreikį.
- Go planuotojas: įgyvendina M:N modelį (M gorutinos ant N sisteminių srautų). Jis atsakingas už gorutinos perjungimą tarp prieinamų sisteminių srautų. Perjungimas vyksta blokuojančiose operacijose (įvestis/išvestis, laukimas kanale) arba aiškiai iškviečiant
runtime.Gosched(). - Kontekstas: Jame yra nuoroda į mašininį kodą vykdymui, nuoroda į steką ir kiti metainformacija, reikalinga planuotojui.
Pradinis gorutinos steko dydis nuo Go 1.4 yra 16KB. Šis dydis nėra fiksuotas ir gali dinamiškai keistis.