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