Sobes.tech
Junior — Middle

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.WaitGroup paketi: bir grup goroutine'in tamamlanmasını beklemeye yardımcı olur, ancak sayılarını sınırlandırmaz.

  • golang.org/x/sync/semaphore paketi: 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.