Maison  >  Article  >  développement back-end  >  Comment utiliser les canaux tampons dans la programmation simultanée de la fonction Golang

Comment utiliser les canaux tampons dans la programmation simultanée de la fonction Golang

WBOY
WBOYoriginal
2024-04-17 12:06:01823parcourir

Les canaux tamponnés sont un moyen efficace de transférer des données en toute sécurité dans la programmation simultanée de la fonction Go. Ils créent un tampon de taille fixe pour stocker les données à envoyer ou à recevoir. Utilisez make pour créer un canal tampon et spécifier la capacité. La goroutine productrice utilise chan

Comment utiliser les canaux tampons dans la programmation simultanée de la fonction Golang

Utilisation du canal tampon dans la programmation simultanée de la fonction de langage Go

Le canal tampon est très utile dans la programmation simultanée de la fonction de langage Go, qui permet aux données d'être transmises en toute sécurité entre les goroutines. Pour ce faire, il crée un tampon de taille fixe qui stocke les données à envoyer ou à recevoir.

Créer un canal tampon

bufferedChannel := make(chan int, 10)

Le 10 représente ici la capacité du tampon, qui peut stocker jusqu'à 10 entiers. 10 表示缓冲区的容量,它可以存储最多 10 个整数。

goroutine 间的通信

生产者 goroutine 可以使用 chan 运算符向通道发送数据:

go func() {
    bufferedChannel <- 42
}()

消费者 goroutine 可以使用

Communication entre goroutines

La goroutine productrice peut utiliser l'opérateur chan pour envoyer des données au canal : <p><pre class='brush:go;toolbar:false;'>go func() { fmt.Println(&lt;-bufferedChannel) }()</pre></p>La goroutine consommatrice peut utiliser <code> L'opérateur reçoit des données du canal : <p><pre class='brush:go;toolbar:false;'>package main import ( &quot;fmt&quot; &quot;math/rand&quot; &quot;sync&quot; ) func main() { // 创建一个缓冲通道 bufferedChannel := make(chan int, 10) // 生成随机数的 goroutine go func() { for i := 0; i &lt; 100; i++ { bufferedChannel &lt;- rand.Intn(100) } close(bufferedChannel) // 发送完成后关闭通道 }() // 打印随机数的 goroutine var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() for { value, ok := &lt;-bufferedChannel if !ok { return // 通道已关闭 } fmt.Println(value) } }() wg.Wait() // 等待消费者 goroutine 结束 }</pre><strong></strong>Exemple pratique</p> <p></p>Pour démontrer l'utilisation du canal tamponné, écrivons un programme simple qui génère des nombres aléatoires à partir de la goroutine du producteur et les transmet à la goroutine du consommateur pour traitement d'impression. 🎜🎜🎜Le code est le suivant : 🎜🎜rrreee🎜Dans cet exemple, nous fixons la capacité du buffer à 10, ce qui signifie que la goroutine productrice peut générer 10 nombres aléatoires en parallèle sans bloquer. La goroutine du consommateur reçoit en boucle des nombres aléatoires du canal jusqu'à ce que le canal soit fermé. 🎜

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!

Déclaration:
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