我想知道在大猩猩里等候更好的方式是time.Sleep()
还是<-time.After()
?这两者有什么不同,如何做出 Select ?谢谢.
我想知道在大猩猩里等候更好的方式是time.Sleep()
还是<-time.After()
?这两者有什么不同,如何做出 Select ?谢谢.
我认为这对大多数项目来说并不重要.已经有question on golang-nuts about this个了,但我认为没有人能得出任何结论.
在实践中,After
在已经需要在多个频道上select
,但也想要超时的情况下是有用的:
select {
case c := <-someChan:
..
case c := <-otherChan:
..
case <-time.After(time.Second * 42):
}
从表面上看,代码Sleep
似乎更简单,而After
构建了一个新的计时器,带有一个句点、一个结束符来发送完成的时间等.
再说一次,我认为这在实践中无关紧要,但time.Sleep
看起来很容易读,所以我会 Select 它.
在我的实现中,它们执行完全相同的系统调用,并最终等待:
futex(??, FUTEX_WAIT, 0, {41, 999892351}
^^ 41 seconds and change