버퍼 채널은 Go 기능 동시 프로그래밍에서 데이터를 안전하게 전송하는 효과적인 방법입니다. 보내거나 받을 데이터를 저장하기 위해 고정 크기 버퍼를 만듭니다. make를 사용하여 버퍼 채널을 만들고 용량을 지정합니다. 생산자 고루틴은 채널에 데이터를 전송하기 위해 chan
Go 언어 함수 동시 프로그래밍에서 버퍼 채널 사용
버퍼 채널은 Go 언어 함수 동시 프로그래밍에서 매우 유용하며, 이를 통해 고루틴 간에 데이터를 안전하게 전달할 수 있습니다. 이는 보내거나 받을 데이터를 저장하는 고정 크기 버퍼를 생성하여 수행됩니다.
버퍼 채널 만들기
bufferedChannel := make(chan int, 10)
여기서 10
은 버퍼의 용량을 나타내며 최대 10개의 정수를 저장할 수 있습니다. 10
表示缓冲区的容量,它可以存储最多 10 个整数。
goroutine 间的通信
生产者 goroutine 可以使用 chan<-
运算符向通道发送数据:
go func() { bufferedChannel <- 42 }()
消费者 goroutine 可以使用 <-chan
고루틴 간 통신
생산자 고루틴은chan<-
연산자를 사용하여 채널에 데이터를 보낼 수 있습니다. go func() { fmt.Println(<-bufferedChannel) }()
<-chan을 사용할 수 있습니다. code > Operator는 채널에서 데이터를 받습니다. 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 结束
}
로그인 후 복사실용적인 예버퍼 채널의 사용법을 보여주기 위해 생산자 고루틴에서 난수를 생성하고 이를 인쇄 처리를 위해 소비자 고루틴에 전달하는 간단한 프로그램을 작성해 보겠습니다. 🎜🎜🎜코드는 다음과 같습니다: 🎜🎜rrreee🎜이 예에서는 버퍼의 용량을 10으로 설정했습니다. 이는 생산자 고루틴이 차단 없이 병렬로 10개의 난수를 생성할 수 있음을 의미합니다. 소비자 고루틴은 채널이 닫힐 때까지 채널에서 난수를 수신하는 반복을 수행합니다. 🎜위 내용은 Golang 함수 동시 프로그래밍에서 버퍼 채널을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!