Golang Channel select
发布时间:2020-12-16 18:48:39 所属栏目:大数据 来源:网络整理
导读:Golang 中对Channel 的支持添加了select关键字, Golang中基于Channel select的实现由监控、定时器等示例参考http://www.jb51.cc/article/p-tuubrzwx-bma.html 执行流程有点类似switch case,case 后只能接channel输出,可以用变量接收:num:=-ch 若所有的ca
Golang 中对Channel 的支持添加了select关键字, Golang中基于Channel select的实现由监控、定时器等示例参考http://www.52php.cn/article/p-tuubrzwx-bma.html 执行流程有点类似switch case,case 后只能接channel输出,可以用变量接收:num:=<-ch 若所有的case后的channel都没有输出,则继续循坏等待,若所有的case后的channel均有输出,则随机选择一个case执行。
但是与for循坏有很大区别,应该是加入了sleep机制,不会占满CPU,下面程序监测程序,与for循环做对比。 1 package main 23 import( 4 "time" 5 ) 6 var quit chan int = make(chan int) 7 func loop(ch chan int) { 8 select { 9 case <-ch: 10 case <-time.After(time.Duration(20)*time.Second): quit <-0 11 } 12 } 13 func gofor(ch chan int){ 14 for{ 15 _,ok:= <-ch; 16 if ok { 17 break 18 } 19 } 20 } 21 func main () { 22 ch := make(chan int) 23 /* 24 close(ch) 25 loop(ch) 26 <-quit 27 */ 28 go gofor(ch) 29 time.Sleep(10*time.Second) 30 ch<-0 31 } 结果分析: 执行Channel select:CPU占用0.0%
执行for循环:CPU占用101% (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |