Junior — Middle
Come interagiscono le goroutine con la memoria durante l'esecuzione dei programmi in Go?
sobes.tech AI
Risposta dell'AI
Le goroutine in Go sono thread leggeri gestiti dal runtime di Go. Ogni goroutine ha il proprio stack di memoria, inizialmente piccolo (circa 2 KB) e può espandersi dinamicamente se necessario.
L'interazione con la memoria avviene nel seguente modo:
- Tutte le goroutine condividono un heap, dove vengono allocati gli oggetti dinamicamente.
- La memoria dell'heap è gestita dal garbage collector, che traccia i riferimenti da tutte le goroutine.
- Per scambiare dati tra le goroutine, si utilizzano generalmente canali (channels), che garantiscono uno scambio sicuro senza condizioni di gara.
- Lo stack di ogni goroutine è isolato, permettendo un cambio efficiente tra di esse senza costi elevati.
Esempio di avvio di due goroutine che scambiano dati tramite un canale:
func main() {
ch := make(chan string)
go func() {
ch <- "ciao dalla goroutine"
}()
msg := <-ch
fmt.Println(msg)
}
In questo modo, le goroutine condividono la memoria dell'heap, ma hanno stack separati, garantendo un'esecuzione parallela efficiente e sicura.