Go 戈鲁廷:时间。睡觉还是时间。之后

Go 戈鲁廷:时间。睡觉还是时间。之后,go,Go,我想知道在goroutine,time.Sleep()或中等待的更好方法是什么,我认为这对大多数程序来说并不重要。已经有过一段时间了,但我认为不能得出任何结论 实际上,After在已经需要在多个频道上选择但也需要超时的情况下非常有用: select { case c := <-someChan: .. case c := <-otherChan: .. case <-time.After(time.Second * 42): } 这两者都将暂停当前goroutine

我想知道在goroutine,
time.Sleep()
中等待的更好方法是什么,我认为这对大多数程序来说并不重要。已经有过一段时间了,但我认为不能得出任何结论

实际上,
After
在已经需要在多个频道上选择
但也需要超时的情况下非常有用:

select {
case c := <-someChan:
  ..
case c := <-otherChan:
  ..
case <-time.After(time.Second * 42):
}

这两者都将暂停当前goroutine执行一段时间。不同的是函数调用时间。Sleep(d)会让当前goroutine进入Sleep子状态,但仍保持在running状态,而channel receive操作
futex(??, FUTEX_WAIT, 0, {41, 999892351}
                          ^^ 41 seconds and change