Junior — Middle
Come viene implementata l'elaborazione parallela e sequenziale dei compiti nel linguaggio Go?
sobes.tech AI
Risposta dell'AI
In Go, l'elaborazione parallela delle attività viene realizzata tramite le goroutine, che sono thread leggeri avviati con la parola chiave go. È possibile avviare una goroutine per eseguire una funzione in modo asincrono, e questa verrà eseguita in parallelo con altre goroutine.
L'elaborazione sequenziale consiste semplicemente nella chiamata di funzioni senza usare go, quando le attività vengono eseguite una dopo l'altra.
Esempio di elaborazione parallela:
package main
import (
"fmt"
"time"
)
func task(id int) {
fmt.Printf("Task %d avviato\n", id)
time.Sleep(time.Second)
fmt.Printf("Task %d terminato\n", id)
}
func main() {
for i := 1; i <= 3; i++ {
go task(i) // avvia una goroutine
}
time.Sleep(2 * time.Second) // attende il completamento delle goroutine
}
In questo esempio, tre attività vengono avviate in parallelo. Se si rimuove go, le attività vengono eseguite in modo sequenziale.
Per sincronizzare e gestire le goroutine, si usano spesso canali (channels) e sync.WaitGroup.