Channel
CSP通讯顺序同步机制:
当程序获取到cpu轮片后,执行程序,Goroutine进入挂起态时并不会放弃cpu使用权,而是将cpu使用权交给其他Goroutine。CPU内容执行时间轮片速度慢,效率低。而在Goroutine内部交换使用权能极大的提升切换效率。
channel管道及特性:
1、channel内的数据只能单向流动
2、管道中的数据只能读一次,一旦读走就消失,不能重复读取。
3、数据在管道中正确流动,要求读、写两端必须同时在线。
无缓冲channel:
没有缓冲区 —— 不能存储任何数据,必须两端同时在线。否则阻塞,直到对端在线。
有缓存channel:
自带缓冲区 —— channel可以根据缓冲区大小,存储适量的数据。
定时器:
time包下ticker对象
NewTicker创建ticker对象,并设置时长。
等待指定时长,循环网ticker.C中写入时间戳
可以实现定时器效果
select:
类似witch
1、case分支中必须是一个IO操作:2、当case分支不满足监听条件,阻塞当前case分支
3、如果同时有多个case分支满足,select随机选定一个执行(select底层实现,case对应一个Goroutine),
4、一次select监听,只能执行一个case分支,未执行的分支将被丢弃。通常将select放于for循环中。
5、default在所有case均不满足时,默认执行的分组,为了防止忙轮询,通常将for中select中的default省略。
**【结论】**使用select的Goroutine,与其他Goroutine间才用异步通信。