Sobes.tech
Junior — Middle

როგორ შეიძლება კონტროლი გაუკეთდეს პროგრამაში აქტიური ნაკადების რაოდენობას?

sobes.tech AI

პასუხი AI-სგან

Go dilində, aktiv axınların (goroutine-lərin) sayını nəzarətdə saxlamaq üçün adətən sinxronizasiya və paralelliyi məhdudlaşdırma mexanizmləri istifadə olunur:

  • Bufferli kanallar kimi semaforlar: 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, bu da eyni vaxtda işləyən goroutine-lərin sayını məhdudlaşdırır.

  • sync.WaitGroup paketi: goroutine 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: rahat semafor təmin edir, paralelliyi məhdudlaşdırmaq üçün.

Misal üçün semafor kanalı ilə:

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

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

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

Bu yolla, aktiv axınların sayını nəzarətdə saxlamaq və resursların həddindən artıq istifadəsinin qarşısını almaq mümkündür.