Sobes.tech
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.