Middle — Middle+
Çok iş parçacıklı bir uygulamada görevleri işlemek için iş parçacığı havuzunun kullanım kavramını açıklayın.
sobes.tech yapay zeka
AI'dan gelen yanıt
İşçi havuzu, görevleri işlemek için aynı anda çalışan iş parçacığı (Go'daki goroutine'ler) sayısını sınırlamaya olanak tanıyan bir mekanizmadır. Her görev için yeni bir goroutine oluşturmak yerine, görevler bir kuyruğa konur ve sabit sayıda işçi (goroutine) bunları ardışık olarak işler. Bu, kaynak kullanımını kontrol etmeye, aşırı goroutine oluşturmayı önlemeye ve performansı artırmaya yardımcı olur.
Go'da, bir işçi havuzu, görevleri içeren bir kanal ve bu kanaldan görevleri okuyan ve yerine getiren sabit sayıda işçi goroutine kullanılarak uygulanabilir:
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
// görevin j işlenmesi
results <- j * 2
}
}
func main() {
jobs := make(chan int, 100)
results := make(chan int, 100)
// 3 işçi başlat
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
// 5 görev gönder
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
// Sonuçları al
for a := 1; a <= 5; a++ {
fmt.Println(<-results)
}
}
Bu yaklaşım, uygulamanın paralelliğini ve kaynaklarını verimli bir şekilde yönetmeye olanak tanır.