Sobes.tech
Middle+

Hoe zijn goroutines opgebouwd en hoeveel geheugen nemen ze in de stack in beslag?

sobes.tech AI

Antwoord van AI

Een goroutine is een lichtgewicht uitvoeringsdraad beheerd door de Go-runtime. Ze worden gemultiplexed op een kleiner aantal systeemthreads (threadpool).

Belangrijkste componenten:

  • Stack: Elke goroutine heeft een aparte, uitbreidbare stack. Aanvankelijk klein (16KB met Go 1.4+, eerder 8KB), kan deze naar behoefte toenemen of afnemen.
  • Go-scheduler: Implementeert het M:N-model (M goroutines op N systeemthreads). Het is verantwoordelijk voor het wisselen tussen goroutines op beschikbare systeemthreads. De overgang vindt plaats bij blokkerende operaties (invoer/uitvoer, wachten op kanaal) of via expliciete aanroep runtime.Gosched().
  • Context: Bevat een pointer naar de machinecode voor uitvoering, een pointer naar de stack en andere metadata die door de scheduler nodig zijn.

De initiële grootte van de stack van een goroutine sinds Go 1.4 is 16KB. Deze grootte is niet vast en kan dynamisch veranderen.