Junior — Middle
Come vengono implementate la concorrenza, l'asincronia e la parallelità nel linguaggio Go?
sobes.tech AI
Risposta dell'AI
In Go, concorrenza, asincronia e parallelismo sono implementati tramite goroutine e canali.
- Goroutine sono thread leggeri avviati con la parola chiave
go. Permettono di eseguire funzioni in modo asincrono e di competere per risorse. - Canali sono usati per scambiare dati in modo sicuro tra goroutine, garantendo sincronizzazione e trasmissione di messaggi.
Il parallelismo si ottiene avviando più goroutine che possono essere eseguite contemporaneamente su più core del processore, se si imposta GOMAXPROCS.
Esempio:
package main
import (
"fmt"
"time"
)
func worker(id int, ch chan string) {
time.Sleep(time.Second)
ch <- fmt.Sprintf("Lavoratore %d completato", id)
}
func main() {
ch := make(chan string)
for i := 1; i <= 3; i++ {
go worker(i, ch) // avvia una goroutine
}
for i := 1; i <= 3; i++ {
msg := <-ch // riceve il risultato dal canale
fmt.Println(msg)
}
}
In questo modo, Go fornisce strumenti semplici ed efficaci per lavorare con concorrenza e parallelismo.