Sobes.tech
Middle+

Cosa sono le goroutine e come sono strutturate internamente?

sobes.tech AI

Risposta dell'AI

Le goroutine sono thread leggeri di esecuzione in Go, gestiti dal runtime del linguaggio piuttosto che dal sistema operativo. A differenza dei thread di sistema, le goroutine hanno uno stack molto piccolo (iniziano con alcuni kilobyte) e possono espandersi dinamicamente.

All'interno di una goroutine, essa è rappresentata dalla struttura g (goroutine), che contiene lo stato, lo stack, i registri e altre informazioni. Il scheduler di Go gestisce il cambio tra le goroutine usando un modello M:N, dove M sono i thread di sistema (thread OS) e N sono le goroutine.

Il scheduler distribuisce le goroutine tra i thread di sistema, permettendo un uso efficiente del multiprocessamento senza costi aggiuntivi per la creazione e il cambio di thread OS. Ciò si ottiene tramite multitasking cooperativo e preemptive all'interno del runtime.

Esempio di creazione di una goroutine:

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

func main() {
    go sayHello() // avvia la goroutine
    time.Sleep(time.Second) // diamo tempo alla goroutine di eseguire
}