Maison > développement back-end > Golang > Méthodes pour contrôler le nombre de concurrence dans le langage Go

Méthodes pour contrôler le nombre de concurrence dans le langage Go

Libérer: 2020-06-17 17:48:47
avant
3445 Les gens l'ont consulté

Méthodes pour contrôler le nombre de concurrence dans le langage Go

Étant donné que le langage go prend en charge la simultanéité, des questions sur la simultanéité sont souvent posées lors des entretiens. Par exemple, quels sont les moyens de contrôler le nombre de simultanéités go ? Voici deux exemples que j'ai personnellement compilés :

func waitGroup() {
    count := 10
    wg := sync.WaitGroup{}

    for i := 0; i < count; i++ {
        wg.Add(1)
        go func(j int) {
            fmt.Print(j)
            wg.Done() // 也可使用 wg.Add(-1)
        }(i)
    }

    wg.Wait()
}
Copier après la connexion

L'utilisation principale ci-dessus est le waitGroup sous le package sync dans go. C'est également une méthode d'implémentation courante au travail. Le point clé est de comprendre la méthode Add. .Position, la méthode Wait consiste à attendre que toutes les coroutines soient exécutées

func channel() {
    count := 10 // 最大支持并发
    sum := 100 // 任务总数

    c := make(chan struct{}, count) // 控制任务并发的chan
    sc := make(chan struct{}, sum) // 控制任务总数的chan
    defer close(c)
    defer close(sc)

    for i:=0; i<sum;i++{
        c <- struct{}{} // 作用类似于waitgroup.Add(1)
        go func(j int) {
            fmt.Println(j)
            <- c // 执行完毕,释放资源
            sc <- struct {}{} // 记录到执行总数里
        }(i)
    }

    for i:=sum; i>0;i-- {
        <- sc
    }
}
Copier après la connexion

L'exemple ci-dessus utilise le canal en go, en utilisant la fonction de blocage de canal et le canal tamponné pour contrôler le nombre de simultanéités, où sc Ceci Le canal peut être supprimé. Dans l'exemple, il est utilisé uniquement pour empêcher que toutes les sorties ne soient pas émises après la sortie du programme principal. En fonctionnement normal, le programme est généralement bloquant, il peut donc être supprimé.

Pour plus de connaissances connexes, veuillez faire attention à la colonne du didacticiel du langage go

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!

Étiquettes associées:
source:segmentfault.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal