Sobes.tech
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é.