Sobes.tech
Junior — Middle

Aké dôsledky nastanú, ak zásobník aktuálnej goroutine prekročí svoj limit?

sobes.tech AI

Odpoveď od AI

Ak je zásobník aktuálnej goroutine v Go prekročený, dôjde k automatickému rozšíreniu zásobníka. Na rozdiel od tradičných vlákien s pevnou veľkosťou zásobníka je zásobník goroutine dynamický a začína s malou veľkosťou (zvyčajne 2 KB) a podľa potreby sa zväčšuje.

Dôsledky:

  • Obsah starého zásobníka je skopírovaný do nového, väčšieho.
  • To môže spôsobiť malé oneskorenie počas rozšírenia.
  • Ak sa zásobník nedá rozšíriť (napríklad kvôli vyčerpaniu pamäte), program môže spustiť panic s chybou "runtime: goroutine stack exceeds limit".

Týmto spôsobom prekročenie limitu zásobníka nevedie k okamžitému zrúteniu, ale k dynamickému zväčšeniu, ktoré v extrémnych podmienkach môže spôsobiť panic.