Sobes.tech
Junior — Middle

Pověz mi o nejpamátnější úloze související s použitím gorutin

sobes.tech AI

Odpověď od AI

Jedním z nezapomenutelných úkolů s gorutinami bylo paralelní zpracování velkého množství požadavků na externí API.

Bylo třeba odeslat stovky požadavků současně, přičemž bylo nutné kontrolovat počet aktivních gorutin, aby nedošlo k přetížení systému a aby nedošlo k odmítnutí API.

Řešení:

  • Použil jsem pool gorutin s omezením.
  • K tomu jsem použil vyrovnávací kanál jako semafor, který omezoval počet aktivních gorutin.
  • Každá gorutina zpracovávala jeden požadavek a po dokončení uvolnila místo.

Příklad kódu:

sem := make(chan struct{}, 10) // maximálně 10 gorutin
for _, req := range requests {
    sem <- struct{}{} // rezervovat místo
    go func(r Request) {
        defer func() { <-sem }() // uvolnit místo
        processRequest(r)
    }(req)
}
// čekání na dokončení všech gorutin
for i := 0; i < cap(sem); i++ {
    sem <- struct{}{} // naplnit kanál pro čekání
}

Toto umožnilo efektivně využívat zdroje a zabránit přetížení.