您现在的位置是:首页 > 编程 > 

Go程序例子(0):缓存通道

2025-07-28 05:46:18
Go程序例子(0):缓存通道 默认情况下,通道是 无缓冲 的,这意味着它们只有在有相应的接收者(<-chan)准备好接收发送的值时,才会接受发送操作(chan <-)。如果没有接收者准备好接收,发送操作会阻塞,直到接收者准备好。 而 有缓冲的通道 可以接受一定数量的值,即使没有立即的接收者。这些值会被保存在通道的缓冲区中,直到有接收者接收这些值或者缓冲区被填满。代码语言:go复制pa

Go程序例子(0):缓存通道

默认情况下,通道是 无缓冲 的,这意味着它们只有在有相应的接收者(<-chan)准备好接收发送的值时,才会接受发送操作(chan <-)。如果没有接收者准备好接收,发送操作会阻塞,直到接收者准备好。 而 有缓冲的通道 可以接受一定数量的值,即使没有立即的接收者。这些值会被保存在通道的缓冲区中,直到有接收者接收这些值或者缓冲区被填满。

代码语言:go复制
package main

import "fmt"

func main() {
	// 在下面的代码中,我们创建了一个能够缓冲最多 2 个字符串值的通道。这个缓冲区允许我们在没有立即接收者的情况下发送两个值,而不会阻塞,直到缓冲区满。
    messages := make(chan string, 2)
	// 由于这个通道是 **有缓冲的**,我们可以在没有相应的并发接收操作的情况下,向通道发送这些值。也就是说,即使没有立即的接收者准备好接收,发送的值会被存储在通道的缓冲区中,直到接收者准备好接收。
    messages <- "buffered"
    messages <- "channel"
	// 稍后我们可以像往常一样接收这两个值。
    fmt.Println(<-messages)
    fmt.Println(<-messages)
}

运行结果:

代码语言:javascript代码运行次数:0运行复制
$ go run channel-buffering.go 
buffered
channel

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1252601.html

相关标签:无
上传时间: 2025-07-27 21:34:16
留言与评论(共有 8 条评论)
本站网友 大同煤矿
6分钟前 发表
messages
本站网友 可以调素琴
0秒前 发表
才会接受发送操作(chan <-)
本站网友 金海岸开元度假村
22分钟前 发表
通道是 无缓冲 的
本站网友 中国嗨嗨网
18分钟前 发表
fmt.Println(<-messages) fmt.Println(<-messages) }运行结果:代码语言:javascript代码运行次数:0运行复制$ go run channel-buffering.go buffered channel
本站网友 环保114
30分钟前 发表
发送操作会阻塞
本站网友 广元博爱医院
11分钟前 发表
才会接受发送操作(chan <-)
本站网友 蛇酒的功效
20分钟前 发表
即使没有立即的接收者