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