System.Threading.SpinWait 是一個輕量同步類型,可以在低級別方案中使用它來避免內核事件所需的高開銷的上下文切換和內核轉換。 在多核計算機上,當預計資源不會保留很長一段時間時,如果讓等待線程以用戶模式旋轉數十或數百個周期,然后重新嘗試獲取資源,則效率會更高。 如果在旋轉后資源變為可用的,則可以節省數千個周期。 如果資源仍然不可用,則只花費了少量周期,並且仍然可以進行基於內核的等待。 這一旋轉-等待的組合有時稱為“兩階段等待操作”。
簡單的說SpinWait 更省資源
while(true) { Thread.Sleep(1); }
CPU 大約用掉了 2%
如果 Thread.Sleep(1) 去掉,則CPU接近耗掉50%
然后把Thread.Sleep拿掉,改用 SpinWait.SpinUntil
SpinWait.SpinUntil(() => false, 1000);//當第一個參數為true時結束等待,第二個是超時設置
CPU使用0%