sleep(0),sleep以及yeid 的區別

Thread.Sleep(0)

Sleep 的意思是告訴操作系統自己要休息 n 毫秒,這段時間就讓給另一個就緒的線程吧。當 n=0 的時候,意思是要放棄自己剩下的時間片,但是仍然是就緒狀態,其實意思和 Yield 有點類似。但是 Sleep(0) 只允許那些優先級相等或更高的線程使用當前的CPU,其它線程只能等着捱餓了。如果沒有合適的線程,那當前線程會重新使用 CPU 時間片

優勢:相比 Yield,可以調度任何處理器的線程使用時間片。

  劣勢:只能調度優先級相等或更高的線程,意味着優先級低的線程很難獲得時間片,很可能永遠都調用不到。當沒有符合條件的線程,會一直佔用 CPU 時間片,造成 CPU 100%佔用率。

Thread.Yeild

Yield 的中文翻譯爲 “放棄”,這裏意思是主動放棄當前線程的時間片,並讓操作系統調度其它就緒態的線程使用一個時間片。但是如果調用 Yield,只是把當前線程放入到就緒隊列中,而不是阻塞隊列。如果沒有找到其它就緒態的線程,則當前線程繼續運行。

 優勢:比 Thread.Sleep(0) 速度要快,可以讓低於當前優先級的線程得以運行。可以通過返回值判斷是否成功調度了其它線程。

  劣勢:只能調度同一個處理器的線程,不能調度其它處理器的線程。當沒有其它就緒的線程,會一直佔用 CPU 時間片,造成 CPU 100%佔用率。

Thread.Sleep(1)

  該方法使用 1 作爲參數,這會強制當前線程放棄剩下的時間片,並休息 1 毫秒(因爲不是實時操作系統,時間無法保證精確,一般可能會滯後幾毫秒或一個時間片)。但因此的好處是,所有其它就緒狀態的線程都有機會競爭時間片,而不用在乎優先級。

  優勢:可以調度任何處理器的線程使用時間片。無論有沒有符合的線程,都會放棄 CPU 時間,因此 CPU 佔用率較低。

  劣勢:相比 Thread.Sleep(0),因爲至少會休息一定時間,所以速度要更慢

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章