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
}