Gepufferte Kanäle sind eine effektive Möglichkeit, Daten bei der gleichzeitigen Programmierung der Go-Funktion sicher zu übertragen. Sie erstellen einen Puffer fester Größe zum Speichern der zu sendenden oder zu empfangenden Daten. Erstellen Sie mit make einen Pufferkanal und geben Sie die Kapazität an. Die Producer-Goroutine verwendet chan
Verwendung des Pufferkanals bei der gleichzeitigen Programmierung von Go-Sprachfunktionen
Der Pufferkanal ist bei der gleichzeitigen Programmierung von Go-Sprachfunktionen sehr nützlich, da er die sichere Übertragung von Daten zwischen Goroutinen ermöglicht. Dies geschieht durch die Erstellung eines Puffers mit fester Größe, der die zu sendenden oder zu empfangenden Daten speichert.
Erstellen Sie einen Pufferkanal
bufferedChannel := make(chan int, 10)
Der 10
stellt hier die Kapazität des Puffers dar, der bis zu 10 Ganzzahlen speichern kann. 10
表示缓冲区的容量,它可以存储最多 10 个整数。
goroutine 间的通信
生产者 goroutine 可以使用 chan<-
运算符向通道发送数据:
go func() { bufferedChannel <- 42 }()
消费者 goroutine 可以使用 <-chan
Kommunikation zwischen Goroutinen
Die Producer-Goroutine kann den Operatorchan<-
verwenden, um Daten an den Kanal zu senden: go func() { fmt.Println(<-bufferedChannel) }()
<-chan verwenden Code > Operator empfängt Daten vom Kanal: 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 结束
}
Nach dem Login kopierenPraktisches BeispielUm die Verwendung des gepufferten Kanals zu demonstrieren, schreiben wir ein einfaches Programm, das Zufallszahlen aus der Producer-Goroutine generiert und diese zur Verarbeitung von Print an die Consumer-Goroutine übergibt. 🎜🎜🎜Der Code lautet wie folgt: 🎜🎜rrreee🎜In diesem Beispiel setzen wir die Kapazität des Puffers auf 10, was bedeutet, dass die Producer-Goroutine 10 Zufallszahlen parallel generieren kann, ohne zu blockieren. Die Consumer-Goroutine empfängt in einer Schleife Zufallszahlen vom Kanal, bis der Kanal geschlossen wird. 🎜Das obige ist der detaillierte Inhalt vonSo verwenden Sie Pufferkanäle in der gleichzeitigen Programmierung der Golang-Funktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!