Junior — Middle
140
Горутиндерді пайдалану бойынша ең есте қаларлық тапсырма туралы айтыңыз.
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Горутиндармен жұмыс істеудің есте қаларлық бір тапсырмасы сыртқы API-ге көп сұрауларды параллель өңдеу болды.
Сұраулардың жүздегенін бір уақытта жіберу керек болды, бірақ жүйені шамадан тыс жүктемей, API-ден бас тартуды болдырмау үшін бір уақытта жұмыс істеп тұрған горутиндердің санын бақылау қажет болды.
Шешім:
- Шектеулі горутин пулын қолдандым.
- Бұл үшін семафор ретінде буферлі каналды қолдандым, ол белсенді горутиндердің санын шектеді.
- Әрбір горутина бір сұрауды өңдеді және аяқталған кезде слотты босатты.
Код мысалы:
sem := make(chan struct{}, 10) // максимум 10 горутин
for _, req := range requests {
sem <- struct{}{} // слотты алу
go func(r Request) {
defer func() { <-sem }() // слотты босату
processRequest(r)
}(req)
}
// барлық горутиндердің аяқталуын күту
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Бұл ресурстарды тиімді пайдаланып, жүктемені азайтуға мүмкіндік берді.