Sobes.tech
Junior — Middle

Fale sobre a tarefa mais memorável relacionada com o uso de goroutines

sobes.tech IA

Resposta da IA

Uma das tarefas memoráveis com goroutines esteve relacionada com o processamento paralelo de um grande número de pedidos a uma API externa.

Era necessário enviar centenas de pedidos simultaneamente, controlando ao mesmo tempo o número de goroutines a trabalhar para não sobrecarregar o sistema e evitar rejeições da API.

Solução:

  • Usei um pool de goroutines com limite.
  • Para isso, utilizei um canal com buffer como semáforo, que limitava o número de goroutines ativas.
  • Cada goroutine processava um pedido e, ao terminar, libertava um espaço.

Exemplo de código:

sem := make(chan struct{}, 10) // máximo de 10 goroutines
for _, req := range requests {
    sem <- struct{}{} // reservar espaço
    go func(r Request) {
        defer func() { <-sem }() // libertar espaço
        processRequest(r)
    }(req)
}
// aguardar que todas as goroutines terminem
for i := 0; i < cap(sem); i++ {
    sem <- struct{}{} // preencher o canal para esperar
}

Isto permitiu usar os recursos de forma eficiente e evitar sobrecarga.