Cos'è una goroutine? Come si differenzia da un thread di sistema? Spiega il pianificatore Go (GMP).
sobes.tech AI
Risposta dell'AI
La goroutine è un thread leggero di esecuzione nel linguaggio Go, gestito dal runtime di Go e non dal sistema operativo. A differenza di un thread di sistema, le goroutine hanno una dimensione dello stack molto più piccola (iniziano con alcuni kilobyte e possono crescere dinamicamente), consentendo di eseguire migliaia o anche milioni di goroutine contemporaneamente con bassi overhead.
I thread di sistema sono creati e pianificati dal sistema operativo, hanno uno stack fisso grande e operazioni di cambio di contesto più costose.
Lo scheduler di Go si basa sul modello GMP:
- G (goroutine) — la goroutine stessa, unità di esecuzione.
- M (macchina) — thread di sistema (thread OS) su cui vengono eseguite le goroutine.
- P (processore) — processore logico, risorsa necessaria per eseguire una goroutine su M.
P gestisce la coda delle goroutine pronte all'esecuzione (G). M può eseguire solo una goroutine alla volta, ma grazie alla presenza di più M e P, lo scheduler distribuisce efficacemente le goroutine tra i thread di sistema, garantendo concorrenza e parallelismo.
Questo approccio permette a Go di utilizzare efficacemente le risorse di sistema e di scalare su sistemi multiprocessore.