Middle+
Kaip yra sukonstruotos gorutinos ir kiek atminties jos užima steke?
sobes.tech AI
Atsakymas iš AI
Gorutina yra lengvas vykdymo srautas, valdomas Go vykdymo aplinkos. Skirtingai nuo OS srautų, gorutinos daugiausia multiplexuojamos mažesniame OS srautų skaičiuje. Tai užtikrina geresnį mastelį.
Pagrindiniai aspektai:
- Tvarkyklės planuotojas (Scheduler): Go vykdymo aplinka turi savo planuotoją (M:N scheduler), kuris valdo gorutinas (M) ribotame OS srautų skaičiuje (N).
- Atminties valdytojas (Memory Manager): Valdo gorutinos stekus ir jų augimą/mažėjimą.
- Komunikacija: Gorutinos sąveikauja per kanalus, užtikrindamos saugų duomenų mainą be blokavimų/muteksų daugeliu atvejų.
Gorutinos stekas:
- Iš pradžių gorutinos stekai yra maži, paprastai 2 KB (iki Go 1.4 buvo 4 KB).
- Stekas yra augantis ir mažėjantis. Perpildžius steką, jis automatiškai plečiasi, o išlaisvinus atmintį — susitraukia.
- Šis dinamiškas steko valdymas sumažina išlaidas, palyginti su fiksuotais dideliais OS srautų stekais.
Atminties naudojimas steke:
- Gorutinos sukūrimo metu ji paprastai užima 2 KB savo steko.
- Atminties suvartojimas gali dinamiškai didėti funkcijų iškvietimų metu ir mažėti jų grąžinimo metu.
- Maksimalus steko dydis yra ribotas, bet pakankamai didelis daugumai užduočių (paprastai keli MB).