Maison > développement back-end > Golang > Comment implémenter la file d'attente de messages dans Goroutine ?

Comment implémenter la file d'attente de messages dans Goroutine ?

WBOY
Libérer: 2024-06-01 13:50:57
original
570 Les gens l'ont consulté

Comment implémenter la file d'attente des messages dans Goroutine ? Utilisez la fonction make pour créer un canal sans tampon. Utilisez l'opérateur <- pour envoyer des messages. Utilisez l'opérateur ->

如何在 Goroutine 中实现消息队列?

Comment implémenter la file d'attente des messages dans Goroutine ?

Introduction

Les Goroutines dans Go sont des primitives de concurrence légères qui peuvent être utilisées pour créer du code d'exécution parallèle. Une file d'attente de messages est un mécanisme de communication qui permet aux Goroutines d'envoyer et de recevoir des messages de manière asynchrone. Ce didacticiel présentera comment utiliser les canaux pour implémenter des files d'attente de messages dans Go et fournira un cas pratique.

Implémentation de la file d'attente des messages

Channel in Go est un canal de communication bidirectionnel qui peut être utilisé pour transférer des valeurs entre Goroutines. Pour créer une chaîne, utilisez la fonction make. Par exemple : make 函数。例如:

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

此代码创建一个无缓冲 channel,这意味着它一次只能容纳一个值。

发送消息

要发送消息,请使用 channel 的 <- 操作符。例如:

ch <- 42
Copier après la connexion

此代码将值 42 发送到 channel。

接收消息

要接收消息,请使用 channel 的 -> 操作符。例如:

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

此代码将从 channel 接收一个值并将其存储在 msg

package main

import "time"

func main() {
    ch := make(chan int)
    go func() {
        for i := 0; i < 10; i++ {
            ch <- i
            time.Sleep(time.Second)
        }
        close(ch)
    }()
}
Copier après la connexion

Ce code crée un canal sans tampon, ce qui signifie qu'il ne peut contenir qu'une seule valeur à la fois.

Envoyer un message

Pour envoyer un message, utilisez l'opérateur <- du canal. Par exemple :

package main

import "time"

func main() {
    ch := make(chan int)
    go func() {
        for {
            msg, ok := <-ch
            if !ok {
                break
            }
            time.Sleep(time.Second)
            println(msg)
        }
    }()
}
Copier après la connexion
Ce code envoie la valeur 42 au canal.

Recevoir des messages

Pour recevoir des messages, utilisez l'opérateur -> de la chaîne. Par exemple :

rrreee

Ce code recevra une valeur du canal et la stockera dans la variable msg. 🎜🎜🎜Cas pratique🎜🎜🎜Créons une application producteur-consommateur simple, où le producteur Goroutine enverra des messages, et le consommateur Goroutine recevra et traitera ces messages. 🎜🎜🎜Code producteur🎜🎜rrreee🎜🎜Code consommateur🎜🎜rrreee🎜Dans cet exemple, le producteur envoie un message à la chaîne chaque seconde, et le consommateur reçoit et traite ces messages de la chaîne à la même fréquence. 🎜

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