Middle+
Come sono strutturate le goroutine e quanta memoria occupano nello stack?
sobes.tech AI
Risposta dell'AI
La goroutine è un leggero thread di esecuzione gestito dall'ambiente di runtime di Go (runtime). Viene multiplexata su un numero inferiore di thread di sistema (pool di thread).
Componenti principali:
- Stack: Ogni goroutine ha uno stack separato ed espandibile. Inizialmente piccolo (16KB con Go 1.4+, precedentemente 8KB), può aumentare o diminuire secondo necessità.
- Scheduler di Go: Implementa il modello M:N (M goroutine su N thread di sistema). Gestisce il cambio di goroutine sui thread disponibili. La commutazione avviene durante operazioni bloccanti (input/output, attesa su canale) o tramite chiamata esplicita
runtime.Gosched(). - Contesto: Contiene un puntatore al codice macchina per l'esecuzione, un puntatore allo stack e altre metadati necessari allo scheduler.
La dimensione iniziale dello stack di una goroutine dal Go 1.4 è di 16KB. Questa dimensione non è fissa e può cambiare dinamicamente.