golang, select 多长时间执行一次?

package main
import (
    "fmt"
)
func main() {
    c := make(chan int)
    for {
        select{
        case <- c:
            fmt.Println(333)
        default:
            fmt.Println(222)
        }
    }
    fmt.Println("Hello, playground")
}

比如这个程序,如果通道 c 一直没有数据进入,每隔多长时间会打印一次 222 ?

阅读 5.9k
2 个回答

你这个程序没有其他goroutine需要调度,这个for死循环一直在运行。间隔时间多少取决于你的cpu速度。。。

你这段代码写的有问题,没有缓冲的c没有写操作,会select中一直不被命中。
且因为你又设置的默认default语句,这个循环会一直输出222,并且CPU会很高。
一般情况下,调度器会在你写的时候唤醒被阻塞等待读的G,这个时间可以忽略不计。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题