Sobes.tech
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.