Junior — Middle
Quali approcci e strumenti in Go vengono utilizzati per organizzare calcoli paralleli e asincroni con le goroutine?
sobes.tech AI
Risposta dell'AI
In Go, per organizzare calcoli paralleli e asincroni, si utilizzano le goroutine, che sono thread leggeri avviati con la parola chiave go.
Strumenti e approcci principali:
- Goroutine: consentono di eseguire funzioni in parallelo senza gestione esplicita dei thread del sistema operativo.
- Canali (channels): vengono usati per scambiare dati in modo sicuro tra le goroutine e per la sincronizzazione.
- select: operatore per attendere più operazioni sui canali, permette di gestire dati provenienti da più fonti.
Esempio:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan<- string) {
time.Sleep(time.Second) // simulazione di lavoro
ch <- fmt.Sprintf("Lavoratore %d terminato", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch)
}
for i := 1; i <= 3; i++ {
msg := <-ch
fmt.Println(msg)
}
}
In questo esempio, tre goroutine vengono eseguite in parallelo, e il canale viene usato per ricevere i risultati.
Pertanto, la combinazione di goroutine e canali è il modo principale di organizzare calcoli paralleli e asincroni in Go.