使用SpinWait 取代 ThreadSleep
Sleep與SpinWait的區別:
使用Thread.Sleep()會導致等待過於進行切換,等待時間不准確,而且會由用戶模式切換到內核模式;使用SpinWait(一個輕量同步類型(結構體))來進行等待的處理,等待過程中會使用自旋等待,從而避免線程頻繁的用戶模式和內核模式切換,一般用於短時的等待操作
當我們在處理一個執行緒時,若需要同步等待時,以往可能會常用 Thread.Sleep,但 Thread.Sleep 會消耗 CPU 的時間配置,所以我們可以使用 Thread.SpinWait 方法 、SpinWait 結構
SpinWait.SpinUntil(() => false, 10000)
Thread.Sleep(10000)
來源:
C#多線程總結
http://www.cnblogs.com/skig/archive/2016/11/15/ThreadSummary.html
[C#.NET][Thread] 善用 SpinWait 處理 執行緒空轉 以利提昇效能
https://dotblogs.com.tw/yc421206/archive/2013/04/25/102300.aspx
沒有留言:
張貼留言