Motif du groupe de travailleurs
Limiter le parallélisme
Motif du groupe de travailleurs est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce qu'un groupe de worker
Un groupe de worker lance un nombre fixe de routines Go qui récupèrent toutes des tâches depuis un canal partagé. Au lieu de créer une routine Go par tâche, vous lancez N worker et leur fournissez les tâches.
- Limite le nombre d'opérations concurrentes
- Réutilise les routines Go au lieu d'en créer des milliers
- Protège les ressources partagées comme les bases de données ou les interfaces de programmation
Pourquoi limiter la concurrence
Des routines Go sans limite peuvent épuiser la mémoire ou les descripteurs de fichiers, ou surcharger un service en aval. Un groupe vous donne un paramètre pour contrôler la quantité de travail exécutée simultanément.
Si vous devez récupérer 10000 URL, vous ne voulez pas effectuer 10000 requêtes HTTP simultanées. Un groupe de 20 worker maintient la situation sous contrôle.
Le canal des tâches
Les tâches arrivent dans un canal jobs. Chaque worker le lit dans une boucle for range. Lorsque le canal est fermé, la boucle se termine et le worker quitte la fonction.
jobs := make(chan int, 100)
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)Un seul worker
Un worker n'est qu'une fonction qui parcourt le canal des tâches. Il traite chaque tâche et écrit le résultat dans un canal de résultats.
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
results <- j * 2
}
}Démarrer plusieurs instances de worker
Lancez le groupe à l'aide d'une simple boucle. Chaque itération démarre une routine Go exécutant la même fonction worker. Elles partagent toutes les mêmes canaux de tâches et de résultats.
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}Types de canaux directionnels
Remarquez <-chan int, en réception seule, et chan<- int, en émission seule, dans la signature de worker. Ces types directionnels permettent au compilateur d'empêcher un worker d'envoyer accidentellement des données dans le canal des tâches ou de lire dans celui des résultats.
Rassembler les résultats
Après avoir fourni toutes les tâches et fermé le canal, la routine Go main lit exactement autant de résultats qu'il y avait de tâches. Cela synchronise le programme afin qu'il ne se termine pas prématurément.
sum := 0
for a := 1; a <= 5; a++ {
sum += <-results
}
fmt.Println("total:", sum)Un groupe complet et exécutable
Voici le modèle complet dans un seul programme : trois instances de worker doublent cinq nombres. Exécutez-le et observez le total.
package main
import "fmt"
func worker(id int, jobs <-chan int, results chan<- int) {
for j := range jobs {
results <- j * 2
}
}
func main() {
jobs := make(chan int, 5)
results := make(chan int, 5)
for w := 1; w <= 3; w++ {
go worker(w, jobs, results)
}
for j := 1; j <= 5; j++ {
jobs <- j
}
close(jobs)
total := 0
for a := 1; a <= 5; a++ {
total += <-results
}
fmt.Println("total:", total)
}Avec tampon ou sans tampon
Un canal de tâches avec tampon permet au producteur de mettre le travail en file sans bloquer jusqu'à ce que le tampon soit plein. Un canal sans tampon impose une transmission directe : l'envoi est bloqué jusqu'à ce qu'un worker soit prêt. Le tampon absorbe les pointes de production.
Choisir la taille du groupe
Pour les opérations limitées par le CPU, dimensionnez le groupe autour de runtime.NumCPU(). Pour les opérations limitées par IO, comme le réseau ou le disque, vous pouvez aller beaucoup plus haut, car les worker passent leur temps à attendre plutôt qu'à calculer.
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("CPUs:", runtime.NumCPU())
}Éviter les fuites de routines Go
Si vous oubliez de fermer close(jobs), les worker restent bloqués indéfiniment sur un canal vide et fuient. Fermez toujours le canal des tâches une fois tout le travail envoyé afin que les boucles for range se terminent.
Vérification rapide
Vérifiez votre compréhension des pools de travail.
Récapitulatif
Vous avez appris le motif du pool de travail :
- Lancer un nombre fixe d'agents qui lisent depuis un canal de tâches partagé
- Utiliser des types de canaux directionnels pour plus de sécurité
- Fermer le canal de tâches pour terminer les agents
- Rassembler les résultats pour synchroniser la fin du traitement
- Dimensionner le pool selon le type de charge (CPU ou IO)
Questions Fréquemment Posées
La leçon « Motif du groupe de travailleurs » est-elle gratuite ?
Oui — le texte complet de « Motif du groupe de travailleurs » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Motif du groupe de travailleurs » ?
Limiter le parallélisme Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Motif du groupe de travailleurs » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Motif du groupe de travailleurs
- Distribution et collecte
- Étapes d’un pipeline
- Arrêt progressif