channel模式
根据同步方式不同,channel有两种模式:
1、同步模式,形式如下:
ch := make(chan int)
2、队列模式,形式如下:
ch := make(chan int, 10)
根据数据方向流不同,channel类型可以有以下三种模式:
- 写操作模式(只发送)
- 读操作模式(只接收)
- 读写操作模式(不限发送与接收)
channel操作
channel有以下操作:
- 创建
- 关闭
- 写(发送)操作
- 读(接收)操作
这些操作都是原子操作
channel状态
根据模式与操作,channel有以下状态:
- 同步写阻塞
- 同步读阻塞
- 关闭状态
- 队列写阻塞
- 队列读阻塞
- 队列可读写
- nil状态
channel状态与操作之间关系
状态/操作 | 写操作 | 读操作 | 关闭 | 创建 |
---|---|---|---|---|
nil状态 | 写阻塞 | 写阻塞 | 产生panic(close of nil channel) | - |
同步写阻塞 | 写阻塞 | 成功读取数据 | 进入关闭状态,产生panic | - |
同步读阻塞 | 成功写入数据 | 读阻塞 | 进入关闭状态 | - |
关闭状态 | 产生panic | 立即返回(nil,false) | 产生panic | - |
队列写阻塞 | 写阻塞 | 成功读取队列中数据 | 进入关闭状态,成功写入队列的数据可读 | - |
队列读阻塞 | 成功写入数据 | 读阻塞 | 进入关闭状态 | - |
队列可读写 | 成功写入数据 | 成功读取数据 | 进入关闭状态,成功写入队列的数据可读 | - |
由于个人水平有限,有什么不足与错误,敬请指正!
网友评论