Sobes.tech
Junior — Middle
140

Горутиндерді пайдалану бойынша ең есте қаларлық тапсырма туралы айтыңыз.

Сұралған компаниялар
SimbirsoftSimbirsoft

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{}{}
}

Бұл ресурстарды тиімді пайдаланып, жүктемені азайтуға мүмкіндік берді.