Pools de workers
Contexte
Section intitulée « Contexte »Un pool de workers utilise plusieurs goroutines pour traiter des tâches depuis un canal. Ce patron limite la concurrence et distribue efficacement le travail.
Créer un pool de 3 workers traitant 5 tâches.
Code exemple
Section intitulée « Code exemple »package main
import ( "fmt" "time")
func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Printf("worker %d traite la tâche %d\n", id, j) time.Sleep(time.Second) results <- j * 2 }}
func main() { const nbJobs = 5 const nbWorkers = 3
jobs := make(chan int, nbJobs) results := make(chan int, nbJobs)
// Démarrer les workers for w := 1; w <= nbWorkers; w++ { go worker(w, jobs, results) }
// Envoyer les tâches for j := 1; j <= nbJobs; j++ { jobs <- j } close(jobs)
// Collecter les résultats for r := 1; r <= nbJobs; r++ { <-results }}Sortie (l’ordre peut varier)
Section intitulée « Sortie (l’ordre peut varier) »worker 3 traite la tâche 1worker 1 traite la tâche 2worker 2 traite la tâche 3worker 1 traite la tâche 4worker 2 traite la tâche 5