我试图更多地了解在 Go 中各种阻塞/等待类型的操作期间表面下发生的事情。以下面的例子为例:
otherChan = make(chan int)
t = time.NewTicker(time.Second)
for {
doThings()
// OPTION A: Sleep
time.Sleep(time.Second)
// OPTION B: Blocking ticker
<- t.C
// OPTION C: Select multiple
select {
case <- otherChan:
case <- t.C:
}
}
从底层来看(系统调用、cpu 调度),这些等待时的区别是什么?
我的理解是time.Sleep让 CPU 可以自由执行其他任务,直到指定的时间过去。阻塞自动收报机<- t.C也做同样的事情吗?处理器是否在轮询通道或是否涉及中断?选择中有多个频道会改变什么吗?
换句话说,假设otherChan从来没有放入任何东西,这三个选项是否会以相同的方式执行,或者一个比其他的资源密集度更低?
慕桂英4014372
相关分类