2016-01-08 69 views
2

在Go中,是否調用time.Sleep()產生其他goroutines?我有一種感覺,但在其他答案(例如:Understanding goroutines)time.Sleep沒有明確列爲調度點。是否有time.Sleep()屈服於其他goroutines?

+3

是。儘管睡眠在某種意義上是特殊的,但所有的函數調用都是屈服點。 – JimB

+0

雖然我知道系統調用的產量,你有沒有參考「所有函數調用都是屈服點」?我一直沒能找到證據。 – bk0

回答

4

是的。請參閱Pre-emption in the scheduler

在以前的版本中,這是循環永遠也餓死了其它夠程在同一個線程,一個嚴重的問題,當GOMAXPROCS只提供一個用戶線程的goroutine。在Go 1.2中,這部分地被解決了:調度程序在進入函數時偶爾被調用。這意味着任何包含(非內聯)函數調用的循環都可以被搶佔,從而允許其他goroutine在同一個線程上運行。

以下設計文檔都還不錯閱讀以瞭解更多有關調度:

相關問題