Junior — Middle
Parlez-moi de la tâche la plus mémorable liée à l'utilisation des goroutines
sobes.tech IA
Réponse de l'IA
L'une des tâches mémorables avec des goroutines était liée au traitement parallèle d'un grand nombre de requêtes vers une API externe.
Il fallait envoyer des centaines de requêtes simultanément, tout en contrôlant le nombre de goroutines en fonctionnement pour ne pas surcharger le système et éviter un refus de l'API.
Solution :
- J'ai utilisé un pool de goroutines avec une limite.
- Pour cela, j'ai utilisé un canal tampon comme sémaphore, qui limitait le nombre de goroutines actives.
- Chaque goroutine traitait une requête et libérait un slot à la fin.
Exemple de code :
sem := make(chan struct{}, 10) // maximum 10 goroutines
for _, req := range requests {
sem <- struct{}{} // réserver un slot
go func(r Request) {
defer func() { <-sem }() // libérer le slot
processRequest(r)
}(req)
}
// attendre la fin de toutes les goroutines
for i := 0; i < cap(sem); i++ {
sem <- struct{}{} // remplir le canal pour attendre
}
Cela a permis d'utiliser efficacement les ressources et d'éviter la surcharge.