Junior — Middle
Mesélj a gorutinok használatával kapcsolatos legemlékezetesebb feladatról
sobes.tech MI
Válasz az MI-től
Egyik emlékezetes feladat a goroutine-kkal kapcsolatban a külső API-hoz való párhuzamos kérésfeldolgozás volt.
Százával kellett egyszerre kérdéseket küldeni, miközben ellenőrizni kellett az aktív goroutine-ok számát, hogy ne terheljük túl a rendszert és elkerüljük az API-tól való elutasítást.
Megoldás:
- Egy korlátozott goroutine-készletet használtam.
- Ehhez egy pufferelt csatornát használtam szeminférumként, amely korlátozta az aktív goroutine-ok számát.
- Minden goroutine egy kérdést dolgozott fel, és a végén felszabadította a helyet.
Kód példa:
sem := make(chan struct{}, 10) // legfeljebb 10 goroutine
for _, req := range requests {
sem <- struct{}{} // hely foglalása
go func(r Request) {
defer func() { <-sem }() // hely felszabadítása
processRequest(r)
}(req)
}
// várakozás minden goroutine befejezésére
for i := 0; i < cap(sem); i++ {
sem <- struct{}{} // csatorna feltöltése várakozáshoz
}
Ez hatékony erőforrás-használatot és túlterhelés elkerülését tette lehetővé.