go语言并发

1、通道的发送、接收以及关闭

1
2
3
4
5
6
7
8
9
10
11
ch := make(chan int)
 
//发送
ch <- 10 // 把10发送到ch中
 
//接收
x := <- ch // 从ch中接收值并赋值给变量x
<-ch       // 从ch中接收值,忽略结果
 
//关闭
close(ch)

2、无缓冲通道和有缓冲通道

无缓冲 有缓冲
同一时刻,同时有 读、写两端把持 channel 同一时刻,允许读和写同时存在
如果只有读端,没有写端,那么 “读端”阻塞 w:直到缓冲区被填满后,写端才会阻塞。
如果只有写端,没有读端,那么 “写端”阻塞 r:缓冲区被读空,读端才会阻塞。

3、判断通道是否关闭

当向通道中发送完数据时,我们可以通过close函数来关闭通道。当一个通道被关闭后,再往该通道发送值会引发panic,从该通道取值的操作会先取完通道中的值。通道内的值被接收完后再对通道执行接收操作得到的值会一直都是对应元素类型的零值。那我们如何判断一个通道是否被关闭了呢?

1
2
3
value, ok := <- ch
//value:从通道中取出的值,如果通道被关闭则返回对应类型的零值。
//ok:通道ch关闭时返回 false,否则返回 true。

4、单向通道

在某个函数中只能执行发送或只能执行接收操作的通道。

1
2
<- chan int // 只接收通道,只能接收不能发送
chan <- int // 只发送通道,只能发送不能接收

5、对不同状态下的通道执行相应操作的结果

 

 

参考:Go语言基础之并发 | 李文周的博客 (liwenzhou.com)

 

posted @   ☞@_@  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
点击右上角即可分享
微信分享提示