Sobes.tech
Junior — Middle

Tətbiqdə aktiv axınların sayını necə nəzarət etmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, aktiv axınların (goroutinlərin) sayını idarə etmək üçün adətən sinxronizasiya və paralelliyi məhdudlaşdırma mexanizmləri istifadə olunur:

  • Semafoor kimi tamponlu kanallar: məhdud tutuma malik kanal yaradır və goroutine-u başlatmadan əvvəl ona dəyər göndərir, və tamamlandıqdan sonra qəbul edir, beləliklə, eyni vaxtda işləyən goroutinlərin sayı məhdudlaşdırılır.

  • sync.WaitGroup paketi: goroutin qrupunun tamamlanmasını gözləməyə kömək edir, lakin onların sayını məhdudlaşdırmır.

  • golang.org/x/sync/semaphore paketi: paralelliyi məhdudlaşdırmaq üçün rahat semafor təmin edir.

Semafoor kanalı ilə nümunə:

sem := make(chan struct{}, 5) // eyni vaxtda maksimum 5 goroutine

for _, task := range tasks {
    sem <- struct{}{} // əgər artıq 5 goroutine işləyirsə, bloklanır
    go func(t Task) {
        defer func() { <-sem }() // yer ayırır
        process(t)
    }(task)
}

// Bütün goroutinlərin tamamlanmasını gözləyirik
for i := 0; i < cap(sem); i++ {
    sem <- struct{}{}
}

Bu şəkildə, aktiv axınların sayını idarə etmək və resursların həddindən artıq istifadəsinin qarşısını almaq mümkündür.