Sobes.tech
Junior — Middle

Goroutin-дарды колдонуу менен байланышкан эң эс тутумдуу тапшырма жөнүндө айтып бериңиз

sobes.tech AI

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{}{} // каналды толтуруу үчүн күтүү
}

Бул ресурстарды эффективдүү колдонууга жана ашыкча жүктөөнү алдын алууга мүмкүндүк берди.