Sobes.tech
Middle — Middle+

Spiega il concetto di utilizzo di un pool di thread per elaborare i compiti in un'applicazione multithread.

sobes.tech AI

Risposta dell'AI

Il pool di worker è un meccanismo che consente di limitare il numero di thread (goroutine in Go) che lavorano contemporaneamente per elaborare i compiti. Invece di creare una nuova goroutine per ogni compito, i compiti vengono messi in una coda, e un numero fisso di worker (goroutine) li elaborano sequenzialmente. Questo aiuta a controllare l’uso delle risorse, evitare la creazione eccessiva di goroutine e migliorare le prestazioni.

In Go, un pool può essere implementato usando un canale di compiti e un numero fisso di goroutine worker che leggono i compiti dal canale e li eseguono:

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        // elaborazione del compito j
        results <- j * 2
    }
}

func main() {
    jobs := make(chan int, 100)
    results := make(chan int, 100)

    // Avviare 3 worker
    for w := 1; w <= 3; w++ {
        go worker(w, jobs, results)
    }

    // Inviare 5 compiti
    for j := 1; j <= 5; j++ {
        jobs <- j
    }
    close(jobs)

    // Ottenere i risultati
    for a := 1; a <= 5; a++ {
        fmt.Println(<-results)
    }
}

Questo approccio permette di gestire efficacemente il parallelismo e le risorse dell’applicazione.