Maison  >  Article  >  développement back-end  >  Comment limiter les routines Go simultanées pour un traitement efficace des URL ?

Comment limiter les routines Go simultanées pour un traitement efficace des URL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 12:51:04470parcourir

How to Limit Concurrent Go Routines for Efficient URL Processing?

Gestion des routines Go simultanées

Limiter le nombre de routines Go exécutées simultanément est crucial pour maintenir la stabilité du système et l'optimisation des ressources. Dans cet article, nous explorerons une solution efficace utilisant des canaux pour contrôler le nombre d'opérations parallèles.

Énoncé du problème :
Concevoir un système qui traite une liste d'URL, avec une contrainte sur le nombre maximum de goroutines (fonctions simultanées) s'exécutant simultanément. Par exemple, étant donné 30 URL, limitez le nombre de goroutines à 10.

Solution proposée :
La solution proposée implique deux techniques clés : créer un nombre fixe de travailleurs et utiliser un canal tamponné pour contrôler le flux de données vers ces travailleurs.

Explication du code :

  1. Groupe de travailleurs : Au lieu de créer une goroutine pour chaque URL, le code proposé crée un nombre fixe de Workers défini par l'indicateur "-parallel". Ces travailleurs traiteront en permanence les URL dès qu'elles seront disponibles.
  2. Canal URL : Un canal tampon nommé « urls » est établi pour servir de moyen de communication entre la fonction principale et les travailleurs. Les URL sont poussées dans ce canal et les travailleurs les récupèrent pour les traiter.
  3. Fonctions du travailleur : Chaque travailleur extrait en continu les URL du canal « urls » et les traite à l'aide d'une goroutine distincte. Cela garantit que seul le nombre spécifié de travailleurs peut fonctionner simultanément.
  4. Canal des résultats : Un canal nommé « résultats » est utilisé pour collecter et imprimer les résultats du traitement.
  5. Fonction principale :

    • Main garantit que toutes les URL sont ajoutées au canal "urls".
    • Il attend que tous les travailleurs terminent leurs tâches en utilisant sync.WaitGroup.
    • La fonction principale imprime les résultats du canal "results".

Avantage :
Le canal tampon limite efficacement le nombre de travailleurs simultanés. Lorsque le canal est plein (atteint la taille du tampon), d'autres goroutines tentant d'ajouter des URL se bloqueront jusqu'à ce que de l'espace soit disponible. À l'inverse, si aucune URL n'est disponible, les travailleurs bloqueront jusqu'à ce qu'une nouvelle URL soit ajoutée au canal.

Conclusion :
Ce code révisé gère efficacement le nombre de routines Go simultanées via l'utilisation d'un pool de travailleurs et d'un canal tamponné. Il fournit un mécanisme flexible et efficace pour garantir que les tâches de traitement sont exécutées de manière contrôlée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn