看下面这一段代码,这段代码执行时会把CPU撑到100%:
func main() {
var ch chan int
for {
select {
case <-ch:
return
default:
}
}
}
我们知道对于select语句,每个case的IO事件都是阻塞的,监听IO事件是不会占用CPU至满的。造成CPU占用的原因是这个空default,因为当case的条件不满足时,循环将会走default,然后执行下一个循环,这就造成了死循环,因此在使用for-select语句的时候不能定义空的default