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
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 可以使用 <-chan
Communication entre goroutines
La goroutine productrice peut utiliser l'opérateurchan<-
pour envoyer des données au canal : go func() { fmt.Println(<-bufferedChannel) }()
<-chan code > L'opérateur reçoit des données du canal : package main
import (
"fmt"
"math/rand"
"sync"
)
func main() {
// 创建一个缓冲通道
bufferedChannel := make(chan int, 10)
// 生成随机数的 goroutine
go func() {
for i := 0; i < 100; i++ {
bufferedChannel <- rand.Intn(100)
}
close(bufferedChannel) // 发送完成后关闭通道
}()
// 打印随机数的 goroutine
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
for {
value, ok := <-bufferedChannel
if !ok {
return // 通道已关闭
}
fmt.Println(value)
}
}()
wg.Wait() // 等待消费者 goroutine 结束
}
Copier après la connexionExemple pratiquePour 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!