.net – Thread.Sleep(0)和Thread.Yield()之間的區別
.Net 4包括新的Thread.Yield()靜態方法.以前將CPU轉移到其他程序的常見方法是Thread.Sleep(0).
除了Thread.Yield()返回一個布林值,還有其他效能,OS內部的差異?
例如,我不知道如果Thread.Sleep(0)檢查是否有其他執行緒準備好執行之前更改當前執行緒等待狀態…如果不是這種情況,當沒有其他執行緒準備好,Thread.Sleep (0)似乎比Thread.Yield()更糟糕.
正如Eric Lippert在封面部落格上解釋的那樣,展示瞭如何實現鎖定 –
source.NET Framework為您提供了多種可用於構建更復雜的等待策略的工具:Thread.SpinWait將處理器置於緊密迴圈中,允許您等待幾納秒或微秒,而無需控制另一個執行緒. Thread.Sleep(0)將控制權控制為任何等同優先順序的執行緒,如果沒有,執行緒將繼續保持當前執行緒. Thread.Yield控制任何與當前處理器相關的就緒執行緒.正如我們已經看到的Thread.Sleep(1)將控制權放在任何作業系統選擇的執行緒上.通過仔細選擇這些呼叫的組合,並在現實條件下進行效能測試,您可以構建高效能實現,當然這也是CLR團隊實際做的.
http://stackoverflow.com/questions/2956961/difference-between-thread-sleep0-and-thread-yield