Go语言,channel,定时器,select

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间才用异步通信。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值