Maison > développement back-end > Golang > Comment limiter efficacement les routines Go simultanées avec les canaux ?

Comment limiter efficacement les routines Go simultanées avec les canaux ?

Barbara Streisand
Libérer: 2024-11-03 08:45:29
original
1071 Les gens l'ont consulté

How to Effectively Limit Concurrent Go Routines with Channels?

Limiter le nombre de routines Go simultanées

Lorsque vous travaillez avec une liste d'URL qui doivent être traitées de manière asynchrone, il est souvent souhaitable de limiter le nombre de goroutines simultanées à éviter des ressources trop importantes. La solution consiste à créer un canal délimité qui contrôle le nombre maximum de goroutines pouvant s'exécuter simultanément.

Tentative originale

Dans la tentative initiale, un canal tamponné de taille parallèle a été créé :

<code class="go">results := make(chan string, *parallel)</code>
Copier après la connexion

L'intention était que lorsque le canal de résultats était plein, le programme se bloquait jusqu'à ce qu'une valeur soit lue dans le canal, permettant ainsi la génération d'une autre goroutine. Cependant, cette approche ne limite pas efficacement le nombre de goroutines, car le programme principal ne bloque pas lorsque toutes les URL ont été traitées.

Solution

Une solution plus efficace consiste à créer un fichier fixe nombre de goroutines de travail :

<code class="go">for i := 0; i < *parallel; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        for url := range urls {
            worker(url, client, results)
        }
    }()
}</code>
Copier après la connexion

Dans cette solution, les goroutines sont chargées de récupérer les URL d'un canal et de les traiter. Le canal est alimenté par les URL d'une goroutine d'alimentation, et une fois que toutes les URL sont récupérées, la goroutine d'alimentation ferme le canal, signalant aux travailleurs de terminer leurs tâches.

Une goroutine distincte surveille l'état d'achèvement du travailleur. goroutines, fermant le canal des résultats lorsque tous les travailleurs ont terminé. Cette approche limite efficacement le nombre de goroutines en cours d'exécution au nombre parallèle spécifié.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal