Sobes.tech
Middle — Middle+

Explique le concept d'utiliser un pool de threads pour traiter des tâches dans une application multithread.

sobes.tech IA

Réponse de l'IA

Un pool de threads est un mécanisme permettant de limiter le nombre de threads (goroutines en Go) fonctionnant simultanément pour traiter des tâches. Au lieu de créer une nouvelle goroutine pour chaque tâche, les tâches sont placées dans une file d’attente, et un nombre fixe de workers (goroutines) les traitent séquentiellement. Cela aide à contrôler l’utilisation des ressources, à éviter la création excessive de goroutines et à améliorer les performances.

En Go, un pool peut être implémenté à l’aide d’un canal de tâches et d’un nombre fixe de goroutines workers qui lisent les tâches du canal et les exécutent:

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        // traitement de la tâche j
        results <- j * 2
    }
}

func main() {
    jobs := make(chan int, 100)
    results := make(chan int, 100)

    // Lancer 3 workers
    for w := 1; w <= 3; w++ {
        go worker(w, jobs, results)
    }

    // Envoyer 5 tâches
    for j := 1; j <= 5; j++ {
        jobs <- j
    }
    close(jobs)

    // Récupérer les résultats
    for a := 1; a <= 5; a++ {
        fmt.Println(<-results)
    }
}

Cette approche permet de gérer efficacement le parallélisme et les ressources de l’application.