关于select

来源:6-4 Select

寻曜

2021-05-17 17:55:35

老师,关于select有个小问题http://img.mukewang.com/climg/60a23d5a096173bf18030936.jpg


这里我在select里面加了default  为什么运行这个代码就不会执行到c1 c2里面呢  照理说 我上面也会写数据到channel呀

写回答

3回答

ccmouse

2021-05-19

​c1, c2有数据,但是因为default是不阻塞的,所以命中次数实在太多了,你没有找到相应的输出。

两种方法,一个是default里面不要print,另一种是采用输出重定向,go run select.go>out.txt,然后打开out.txt查找。(警告:out.txt会非常非常大)


2

weixin_慕用2290475

2022-02-24

select多路复用,开启goroutine并发处理,default因为不被阻塞,速度非常快,人的肉眼是有限的,机器处理速度每秒几千几万几十万,你看不到case的数据,要么你把default去掉,要么你在加上time.sleep超时等待,要么你导出到文件,查找你的数据

1

慕侠2582827

2022-02-19

你可以在select所在的for循环里的最后加一句time.Sleep(time.Millisecond)这样就能看到c1和c2接收到的数据了

https://img.mukewang.com/climg/621071f009f3e04608500640.jpg


https://img.mukewang.com/climg/621071a509b5afae04400438.jpghttps://img.mukewang.com/climg/621071bb099a2e6804300418.jpg

1

0 学习 · 1399 问题

查看课程