Sobes.tech
Senior

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.