როგორ შეიძლება კონტროლი გაუკეთდეს პროგრამაში აქტიური ნაკადების რაოდენობას?
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.WaitGrouppaketi: 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/semaphorepaketi: 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.