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