Junior — Middle
Коддой колдонмодо активдүү агымдардын санын кантип көзөмөлдөсө болот?
sobes.tech AI
AIден жооп
Go тилинде, актив агымдардын (goroutine) санын көзөмөлдөө үчүн адатта синхрондоштуруу жана параллелизмди чектөө механизмдери колдонулат:
-
Буферленген каналдар сыяктуу семафорлор: чектелген сыйымдылыктагы канал түзүп, goroutine баштаардан мурун ага маанини жиберип, аяктагандан кийин кабыл алып, ошентип бир убакта иштеп жаткан goroutineдардын санын чектейт.
-
sync.WaitGroupпакети: goroutine топтому аяктагандан кийин күтүүгө жардам берет, бирок алардын санын чектебейт. -
golang.org/x/sync/semaphoreпакети: ыңгайлуу семафорду камсыз кылат, параллелизмди чектөө үчүн.
Мисал катары семафор каналын колдонуу:
sem := make(chan struct{}, 5) // максимум 5 goroutine бир убакта
for _, task := range tasks {
sem <- struct{}{} // блоктоп калат, эгерде 5 goroutine иштеп жатса
go func(t Task) {
defer func() { <-sem }() // орун бошотуу
process(t)
}(task)
}
// бардык goroutineдар аяктагандан кийин күтүү
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Бул ыкма менен актив агымдардын санын көзөмөлдөп, ресурстарды ашыкча колдонуу алдын алууга болот.