Junior — Middle
Est-il possible de fixer une limite au nombre de threads fonctionnant simultanément dans le langage Go?
sobes.tech IA
Réponse de l'IA
En Go, il n’existe pas de mécanisme intégré pour limiter directement le nombre de goroutines (fils d’exécution) fonctionnant simultanément. Il peut y avoir beaucoup de goroutines, et elles sont légères. Pour limiter le nombre de goroutines en cours d’exécution en même temps, on utilise généralement des sémaphores ou des canaux avec une capacité limitée.
Exemple de limitation du nombre de goroutines en cours d’exécution simultanément à l’aide d’un canal :
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Réserver une place
fmt.Printf("Travailleur %d démarré\n", id)
time.Sleep(time.Second) // Travail
fmt.Printf("Travailleur %d terminé\n", id)
<-sem // Libérer une place
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // Canal avec limite
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Ici, le canal sem avec un tampon de maxConcurrent limite le nombre de goroutines en cours d’exécution à 3.