Go语言,channel,定时器,select
当程序获取到cpu轮片后,执行程序,Goroutine进入挂起态时并不会放弃cpu使用权,而是将cpu使用权交给其他Goroutine。CPU内容执行时间轮片速度慢,效率低。而在Goroutine内部交换使用权能极大的提升切换效率。
<h3>channel管道及特性:</h3> <blockquote>1、channel内的数据只能单向流动
2、管道中的数据只能读一次,一旦读走就消失,不能重复读取。
3、数据在管道中正确流动,要求读、写两端必须同时在线。
没有缓冲区 —— 不能存储任何数据,必须两端同时在线。否则阻塞,直到对端在线。
</blockquote> <h3>有缓存channel:</h3> <blockquote>自带缓冲区 —— channel可以根据缓冲区大小,存储适量的数据。
</blockquote> <h3>定时器:</h3> <blockquote>time包下ticker对象
NewTicker创建ticker对象,并设置时长。
等待指定时长,循环网ticker.C中写入时间戳
可以实现定时器效果
</blockquote> <h3>select:</h3> <blockquote>类似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间才用异步通信。
</blockquote> 到此这篇关于“Go语言,channel,定时器,select”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!您可能感兴趣的文章:
go语言并发编程
图解 Go 并发编程
浅谈 Go 语言 select 的实现原理
Go并发编程——channel
【文末有惊喜!】一文读懂golang channel
Go语言,channel,定时器,select
Golang 并发机制
GoLang之协程
22Go常见的并发模式和并发模型
go 语言并发