Junior — Middle
Spiega il concetto di suddivisione dei compiti tra più thread o processi per ottimizzare il funzionamento del sistema. Cosa significa il termine Work-Sharing?
sobes.tech AI
Risposta dell'AI
Work-Sharing è un concetto di distribuzione dei compiti tra più thread o processi per aumentare l’efficienza e le prestazioni del sistema. Invece che un singolo thread esegua tutto il lavoro in modo sequenziale, i compiti vengono suddivisi in parti che vengono elaborate in parallelo da diversi esecutori.
In Go, questo viene realizzato con goroutine e canali, dove più goroutine possono elaborare insieme un insieme di compiti, distribuendo il carico e riducendo i tempi di esecuzione.
Esempio in Go:
package main
import (
"fmt"
"sync"
)
func worker(id int, jobs <-chan int, wg *sync.WaitGroup) {
defer wg.Done()
for j := range jobs {
fmt.Printf("Lavoratore %d che elabora il task %d\n", id, j)
}
}
func main() {
jobs := make(chan int, 5)
var wg sync.WaitGroup
for w := 1; w <= 3; w++ {
wg.Add(1)
go worker(w, jobs, &wg)
}
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
wg.Wait()
}
Qui, più lavoratori (thread) elaborano insieme una coda di compiti, accelerando l’esecuzione rispetto all’elaborazione sequenziale.