Sobes.tech
Senior

Cos'è una goroutine? Come è strutturata?

sobes.tech AI

Risposta dell'AI

Una goroutine è un leggero thread di esecuzione nel linguaggio Go. A differenza dei thread di sistema, le goroutine sono gestite dal runtime di Go e hanno uno stack molto piccolo (inizia con alcuni kilobyte e può crescere dinamicamente). Questo permette di eseguire centinaia di migliaia di goroutine contemporaneamente con bassi costi di overhead.

Struttura di una goroutine:

  • Quando si crea una goroutine (con l'operatore go), il pianificatore di Go la mette nella coda delle attività pronte all'esecuzione.
  • Il runtime di Go utilizza una pianificazione M:N: M thread di sistema (thread OS) gestiscono N goroutine.
  • Le goroutine cambiano contesto a livello di runtime, il che è più veloce rispetto al cambio di thread di sistema.
  • Ogni thread (M) può eseguire più goroutine (N), alternando tra loro in caso di blocchi o secondo necessità.

Esempio di creazione di una goroutine:

func sayHello() {
    fmt.Println("Ciao dalla goroutine")
}

func main() {
    go sayHello() // avvia la goroutine
    time.Sleep(time.Second) // attende affinché la goroutine abbia il tempo di eseguirsi
}