我想知道在 goroutine 中等待的更好方法是什么,time.Sleep()或者<-time.After()?两者有什么区别,如何选择?谢谢。
2 回答
精慕HU
TA贡献1845条经验 获得超8个赞
我认为这对大多数程序来说并不重要。关于 golang-nuts有一个关于此的问题,但我认为无法得出任何结论。
在实践After中,在已经需要select在多个通道上但也希望超时的情况下很有用:
select {
case c := <-someChan:
..
case c := <-otherChan:
..
case <-time.After(time.Second * 42):
}
通过表面上看代码Sleep似乎更简单,同时After构建一个新的计时器,一个句点,一个闭包来发送它完成时的时间等。
同样,我认为这在实践中并不重要,但time.Sleep看起来很可读,所以我会同意。
在我的实现中,它们都执行完全相同的系统调用并最终等待:
futex(??, FUTEX_WAIT, 0, {41, 999892351}
^^ 41 seconds and change
- 2 回答
- 0 关注
- 338 浏览
添加回答
举报
0/150
提交
取消