Senior
Klasik bir işçi havuzu yazmak istiyor musun?
sobes.tech yapay zeka
AI'dan gelen yanıt
Evet, klasik worker havuzu deseni, sınırlı sayıda paralel görevi yönetmek için kullanılan bir kalıptır. Go'da genellikle goroutine'ler ve kanallar kullanılarak uygulanır.
Fikir, görevleri kanaldan okuyan ve işleyen bir worker havuzunun (goroutine'ler) olmasıdır. Bu, aynı anda yürütülen görev sayısını kontrol etmeye ve kaynakları verimli kullanmaya olanak tanır.
Go'da basit bir worker havuzu örneği:
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 görev %d üzerinde çalışıyor\n", id, j)
}
}
func main() {
jobs := make(chan int, 5)
var wg sync.WaitGroup
// 3 worker başlat
for w := 1; w <= 3; w++ {
wg.Add(1)
go worker(w, jobs, &wg)
}
// 5 görev gönder
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
wg.Wait()
}
Bu yaklaşım, görevleri sınırlı sayıda worker arasında verimli bir şekilde dağıtmayı sağlar.