Junior — Middle
Est-il possible de fixer une limite au nombre de goroutines exécutées simultanément dans un programme?
sobes.tech IA
Réponse de l'IA
Dans le langage Go, il n’existe pas de mécanisme intégré pour fixer une limite stricte au nombre de goroutines lancées simultanément. Il peut y avoir beaucoup de goroutines, et leur planification et leur commutation sont gérées par le runtime de Go.
Cependant, si vous souhaitez limiter le nombre de goroutines en cours d’exécution simultanément (par exemple, pour contrôler l’utilisation des ressources), vous pouvez utiliser des sémaphores ou des canaux pour limiter le parallélisme.
Exemple de limitation du nombre de goroutines en cours d’exécution simultanément à l’aide d’un canal :
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // acquisition de la ressource
fmt.Printf("Goroutine %d a commencé\n", id)
// ... travail ...
fmt.Printf("Goroutine %d a terminé\n", id)
<-sem // libération de la ressource
}
func main() {
const maxGoroutines = 5
sem := make(chan struct{}, maxGoroutines)
var wg sync.WaitGroup
for i := 0; i < 20; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Dans cet exemple, pas plus de 5 goroutines ne fonctionneront simultanément.