Sobes.tech
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.