Junior
Cosa sono le goroutine?
sobes.tech AI
Risposta dell'AI
Thread leggeri di esecuzione, gestiti dall'ambiente di runtime di Go. Vengono creati con la parola chiave go prima di chiamare una funzione.
Caratteristiche principali:
- Minor consumo di memoria: La goroutine inizia con una pila di piccole dimensioni (di solito 2 KB), che può aumentare o diminuire dinamicamente.
- Creazione più veloce: Creare una goroutine è molto più veloce rispetto alla creazione di un thread di sistema.
- Multiplexing sui thread di sistema: Molte goroutine possono essere multiplexate su un numero inferiore di thread di sistema dal pianificatore di Go.
- Pianificazione cooperativa: Le goroutine non vengono preemptivamente interrotte; cedono volontariamente il controllo al pianificatore (ad esempio, durante chiamate bloccanti o chiamate esplicite a
runtime.Gosched()).
Esempio di creazione:
package main
import (
"fmt"
"time"
)
func sayHello() {
fmt.Println("Ciao dal goroutine!")
}
func main() {
go sayHello() // Esegue sayHello come goroutine
fmt.Println("Ciao dalla funzione principale!")
time.Sleep(1 * time.Second) // Per evitare che la funzione principale termini prima della goroutine
}
Confronto con i thread:
| Caratteristica | Goroutine di Go | Thread del sistema operativo |
|---|---|---|
| Gestione | Ambiente di runtime di Go | Sistema operativo |
| Consumo di memoria | Basso, pila dinamica | Alto, pila fissa |
| Creazione | Veloce | Lento |
| Pianificazione | Cooperativa | Preemptiva |
| Sincronizzazione | Canali, pacchetto sync | Mutex, semafori del sistema operativo |