Maison > développement back-end > Golang > Comment communiquer en utilisant les coroutines Golang ?

Comment communiquer en utilisant les coroutines Golang ?

WBOY
Libérer: 2024-06-02 09:42:57
original
373 Les gens l'ont consulté

Les coroutines sont utilisées pour la communication dans Go. Les canaux sont un mécanisme de base pour envoyer et recevoir des données entre coroutines. Les coroutines peuvent envoyer ou recevoir des données depuis un canal en utilisant les opérateurs d'envoi (<-) et de réception (<-). Cas pratique : Sommation parallèle, démontrant l'utilisation de coroutines et de canaux pour calculer la somme de nombres en parallèle, en envoyant la somme partielle au canal, puis en la recevant et en l'imprimant par la coroutine principale.

如何使用 Golang 协程进行通信?

Utilisez les coroutines Golang pour la communication

Dans le langage Go, les coroutines offrent un moyen léger et efficace de programmation simultanée. Ils permettent d'exécuter plusieurs tâches simultanément dans le contexte d'un seul thread, améliorant ainsi les performances des applications. La communication entre les coroutines est cruciale pour la coordination des tâches et le partage des données.

Canaux

Dans Go, les canaux sont un mécanisme de base pour envoyer et recevoir des données entre coroutines. Un canal est une file d'attente non tamponnée ou tamponnée utilisée pour fournir des valeurs. Pour créer un canal, vous pouvez utiliser la syntaxe suivante :

ch := make(chan T)
Copier après la connexion

T est le type d'élément dans le canal. T 是通道中的元素类型。

发送数据到通道

要向通道发送数据,可以使用 <- 操作符:

ch <- data
Copier après la connexion

从通道接收数据

要从通道接收数据,可以使用 <- 操作符:

data := <-ch
Copier après la connexion

实战案例:并行求和

为了演示协程通信,让我们编写一段程序来使用协程并行求和一组数字:

package main

import (
    "fmt"
    "sync"
)

func sum(a []int, ch chan int) {
    sum := 0
    for _, v := range a {
        sum += v
    }
    ch <- sum
}

func main() {
    a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    ch := make(chan int)

    var wg sync.WaitGroup
    for i := 0; i < 5; i++ {
        start := i * 2
        end := start + 2
        wg.Add(1)
        go sum(a[start:end], ch)
    }

    go func() {
        for i := 0; i < 5; i++ {
            total := <-ch
            fmt.Println("Partial sum:", total)
        }
        wg.Done()
    }()

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

在这个示例中,我们创建了 5 个协程,每个协程使用通道 ch

🎜Envoyer des données au canal🎜🎜🎜Pour envoyer des données au canal, vous pouvez utiliser l'opérateur <- : 🎜rrreee🎜🎜Recevoir des données du canal🎜🎜🎜Pour recevoir des données de le canal, vous pouvez utiliser <code> 🎜Dans cet exemple, nous créons 5 coroutines, chaque coroutine utilise le canal <code>ch pour calculer une somme partielle. La coroutine principale se charge de recevoir ces sommes partielles et de les imprimer sur la console. 🎜

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