time.Sleep()会产生其他goroutines吗?

时间:2016-01-08 00:53:33

标签: go concurrency scheduling

在Go中,是否调用time.Sleep()会产生其他goroutines?我有一种感觉,但在其他答案中(例如:Understanding goroutines)time.Sleep未明确列为调度点。

1 个答案:

答案 0 :(得分:6)

是。请参阅Pre-emption in the scheduler

  

在以前的版本中,永远循环的goroutine可能会在同一个线程上淘汰其他goroutine,这是GOMAXPROCS只提供一个用户线程时的一个严重问题。在Go 1.2中,部分解决了这个问题:在进入函数时偶尔会调用调度程序。这意味着任何包含(非内联)函数调用的循环都可以被抢占,允许其他goroutine在同一个线程上运行。

以下设计文档也是很好的读取,以了解有关调度程序的更多信息: