前言
golang相对其他编程语言,在并发编程中数据通信有特殊处理,CSP模式,使用数据通信保证数据安全,而不是共享内存模式。使用到的内置组件就是channel
channel简介
源码分析
场景分析
结论概览
| 场景 | 读 | 写 | 关闭 | 异常情况是否可以被捕获 |
|---|---|---|---|---|
| nil channel | 阻塞 | 阻塞 | panic | 关闭channel的panic可以被捕获 |
| 无缓冲channel | 无写入情况下,阻塞 | 无读取情况下,阻塞 | 不可重复close | 关闭channel的panic可以被捕获 |
| 有缓冲channel | 1. 关闭情况下可读,读到默认值,且flag为false 2. 缓冲区有数据正常读取,无数据阻塞 |
1. 关闭情况下写,会panic 2. 缓存区有空间直接写入,无空间则阻塞 |
不可重复close | 1. 重复关闭可以被捕获 2. 关闭情况下写的panic也可以被捕获 |