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),因爲至少會休息一定時間,所以速度要更慢