Bir uygulamada aktif akışların sayısını nasıl kontrol edebilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, aktif çalışan iş parçacığı sayısını (goroutine) kontrol etmek için genellikle senkronizasyon ve paralellik sınırlandırma mekanizmaları kullanılır:
-
Semafoor olarak tamponlu kanallar: sınırlı kapasiteye sahip bir kanal oluşturur ve goroutine başlatmadan önce ona bir değer gönderir, tamamlandıktan sonra ise bir değer alır, böylece aynı anda çalışan goroutine sayısı sınırlandırılır.
-
sync.WaitGrouppaketi: bir grup goroutine'in tamamlanmasını beklemeye yardımcı olur, ancak sayılarını sınırlandırmaz. -
golang.org/x/sync/semaphorepaketi: paralelliği sınırlandırmak için kullanışlı bir semafor sağlar.
Semafoor kanalı kullanımıyla örnek:
sem := make(chan struct{}, 5) // aynı anda en fazla 5 goroutine
for _, task := range tasks {
sem <- struct{}{} // 5 goroutine zaten çalışıyorsa engeller
go func(t Task) {
defer func() { <-sem }() // slotu serbest bırakır
process(t)
}(task)
}
// Tüm goroutine'lerin tamamlanmasını bekle
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Bu şekilde, aktif iş parçacığı sayısı kontrol edilebilir ve aşırı kaynak kullanımı önlenebilir.