Maison > développement back-end > Golang > Comment maintenir un nombre constant de Goroutines exécutées simultanément dans Go ?

Comment maintenir un nombre constant de Goroutines exécutées simultanément dans Go ?

Patricia Arquette
Libérer: 2024-12-02 00:49:14
original
972 Les gens l'ont consulté

How to Maintain a Constant Number of Simultaneously Running Goroutines in Go?

Threading Goroutines dans Go : exécuter simultanément un nombre constant

Le domaine de la concurrence Go offre une pléthore de documents sur l'attente de l'achèvement d'un nombre spécifié de goroutines. Cependant, un défi distinct se présente : assurer l'exécution continue d'un nombre prédéfini de goroutines, l'une commençant alors qu'une autre se termine.

Considérons un scénario avec une quantité importante de tâches, comme le traitement de données récupérées à partir d'un MySQL. base de données. Une approche naïve pourrait lancer un grand nombre de goroutines parallèles, exécutant simultanément des centaines de milliers de tâches. En revanche, le comportement souhaité limite le nombre de goroutines exécutées simultanément à un nombre fixe (disons 20).

Ce modèle de concurrence contrôlée est connu sous le nom de « parallélisme limité ». L'implémentation de ce modèle dans Go implique d'utiliser un canal de structures vides comme sémaphore, dictant le nombre maximum de goroutines de travail simultanées. Voici une illustration :

package main

import "fmt"

func main() {
    maxGoroutines := 10
    guard := make(chan struct{}, maxGoroutines)

    for i := 0; i < 30; i++ {
        guard <- struct{}{} // blocks if guard channel is full
        go func(n int) {
            worker(n)
            <-guard // unlocks a slot in guard
        }(i)
    }
}

func worker(i int) { fmt.Println("doing work on", i) }
Copier après la connexion

Cette implémentation garantit que pas plus que le nombre spécifié de goroutines ne s'exécutent simultanément. Par conséquent, lorsqu'une goroutine de travail se termine, une nouvelle goroutine est immédiatement lancée, maintenant le niveau de concurrence souhaité.

L'article « Go Concurrency Patterns » explore plus en détail ce concept dans sa section « Parallélisme limité », fournissant des informations plus approfondies. un aperçu de cette technique de concurrence cruciale.

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