Maison > développement back-end > Golang > Explication détaillée et exemples de Goroutines dans le modèle de concurrence Golang

Explication détaillée et exemples de Goroutines dans le modèle de concurrence Golang

王林
Libérer: 2023-07-18 11:03:18
original
793 Les gens l'ont consulté

Explication détaillée et exemples du modèle de concurrence Goroutines de Golang

Dans le domaine du développement logiciel actuel, la programmation simultanée est de plus en plus devenue une technologie indispensable. Le modèle de thread traditionnel est souvent confronté à une série de problèmes, tels qu'une surcharge élevée de commutation de thread, la sécurité des threads de données partagées, etc. Pour résoudre ces problèmes, Golang introduit un modèle de concurrence appelé Goroutines. Cet article présentera en détail le modèle de concurrence Goroutines de Golang et donnera quelques exemples de code pratiques.

Que sont les Goroutines ?
Les goroutines sont l'unité de base de l'exécution simultanée dans Golang. Elles peuvent être considérées comme un thread léger. Chaque Goroutine peut s'exécuter indépendamment, possède sa propre pile et sa propre séquence d'instructions et est créée à l'aide de mots-clés Go. Par rapport aux threads traditionnels, les frais généraux liés à la création et à la destruction des Goroutines sont beaucoup plus faibles, et le basculement entre les Goroutines est également plus efficace.

Exemple 1 : Exemple simple de Goroutine
Voici un exemple simple de Goroutine qui montre comment utiliser Goroutines pour effectuer des tâches simultanément :

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }
}

func printLetters() {
    for i := 'a'; i < 'e'; i++ {
        fmt.Printf("%c
", i)
    }
}

func main() {
    go printNumbers()
    go printLetters()

    // 主Goroutine等待一定时间,以便其他Goroutine有机会执行
    time.Sleep(2 * time.Second)
}
Copier après la connexion

Dans l'exemple ci-dessus, nous avons défini deux fonctions printNumbers</code > et <code> printLetters, qui sont utilisés pour imprimer respectivement des chiffres et des lettres. Dans la fonction main, nous utilisons le mot-clé go pour démarrer deux Goroutines indépendantes afin d'exécuter ces deux fonctions simultanément. Dans le même temps, afin de garantir que les autres Goroutines aient suffisamment de temps pour s'exécuter, nous appelons time.Sleep dans la Goroutine principale. printNumbersprintLetters,它们分别用于打印数字和字母。在main函数中,我们通过go关键字来启动两个独立的Goroutines并发地执行这两个函数。同时,为了确保其他Goroutines有足够的时间执行,我们在主Goroutine中调用了time.Sleep

示例2:使用通道实现Goroutine间的通信
除了并发执行任务,Goroutines还可以通过通道进行安全地传递数据,从而实现多个Goroutines之间的通信。下面是一个使用通道的示例代码:

package main

import "fmt"

func produce(c chan<- int) {
    for i := 0; i < 5; i++ {
        c <- i
    }
    close(c)
}

func consume(c <-chan int) {
    for num := range c {
        fmt.Println(num)
    }
}

func main() {
    ch := make(chan int)

    go produce(ch)
    consume(ch)
}
Copier après la connexion

在上述示例中,我们定义了两个函数produceconsume,分别用于生产和消费数据。在main函数中,我们创建了一个通道ch,并通过go关键字并发地执行produce函数和consume函数。produce函数通过c <- i将数据发送到通道中,而consume函数通过num := range c从通道中接收数据。在produce函数的末尾,我们调用了close(c)来关闭通道,以便consume

Exemple 2 : Utiliser des canaux pour mettre en œuvre la communication entre les Goroutines

En plus d'exécuter des tâches simultanément, les Goroutines peuvent également transférer des données en toute sécurité via des canaux pour établir une communication entre plusieurs Goroutines. Voici un exemple de code utilisant des canaux :
rrreee

Dans l'exemple ci-dessus, nous avons défini deux fonctions produce et consume pour produire et consommer des données respectivement. Dans la fonction main, nous créons un canal ch et exécutons la fonction produce simultanément via le mot-clé go et le Fonction consommer. La fonction produce envoie des données au canal via c <- i, tandis que la fonction consume transmet num := range c code>Recevoir les données du canal. A la fin de la fonction <code>produce, nous appelons close(c) pour fermer le canal afin que la fonction consume se termine après avoir lu toutes les données . 🎜🎜Résumé🎜Cet article présente le modèle de concurrence Goroutines de Golang et donne des exemples de code pratiques. Les Goroutines sont des threads légers créés via des mots-clés Go et disposent de piles et de séquences d'instructions indépendantes. Grâce à un exemple de code, nous montrons comment utiliser Goroutines pour exécuter des tâches simultanément et mettre en œuvre une communication sécurisée entre Goroutines via des canaux. En utilisant correctement Goroutines, la programmation simultanée peut effectuer diverses tâches plus efficacement. Essayez d'exécuter l'exemple de code ci-dessus pour mieux comprendre la puissance des Goroutines ! 🎜

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