我想知道在goroutine中等待的更好方法是什么,time.Sleep()或者<-time.After()?两者之间有什么区别以及如何做出选择?谢谢.
cni*_*tar 20
我认为对大多数项目来说并不重要.关于这个问题有一个关于golang-nuts的问题,但我不认为可以得出任何结论.
实际上After,在一个已经需要select在多个通道上但又想要超时的环境中非常有用:
select {
case c := <-someChan:
..
case c := <-otherChan:
..
case <-time.After(time.Second * 42):
}
Run Code Online (Sandbox Code Playgroud)
通过表面看代码Sleep似乎更简单,同时After构建一个新的计时器,带有句点,一个闭包来发送它完成的时间等.
同样,我认为它在实践中并不重要,但time.Sleep看起来很可读,所以我会坚持下去.
在我的实现中,它们都执行完全相同的系统调用并最终等待:
futex(??, FUTEX_WAIT, 0, {41, 999892351}
^^ 41 seconds and change
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3984 次 |
| 最近记录: |