Senior
Vrei să scrii un pool de workeri clasic?
sobes.tech AI
Răspuns de la AI
Da, modelul clasic de worker pool este o strategie pentru gestionarea unui număr limitat de sarcini paralele. În Go, acesta este de obicei implementat folosind goroutines și canale.
Ideea este că există un pool de lucrători (goroutines) care citesc sarcini dintr-un canal și le procesează. Acest lucru permite controlul numărului de sarcini executate simultan și utilizarea eficientă a resurselor.
Exemplu de un worker pool simplu în 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("Worker %d procesează sarcina %d\n", id, j)
}
}
func main() {
jobs := make(chan int, 5)
var wg sync.WaitGroup
// Pornim 3 lucrători
for w := 1; w <= 3; w++ {
wg.Add(1)
go worker(w, jobs, &wg)
}
// Trimitem 5 sarcini
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
wg.Wait()
}
Această abordare permite distribuirea eficientă a sarcinilor între un număr limitat de lucrători.