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í.