.net – Thread.Sleep(0)和Thread.Yield()之间的区别

由于Java早已有睡眠和收益,所以我发现这个平台是answers,而不是.Net

.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团队实际做的.

转载注明原文:.net – Thread.Sleep(0)和Thread.Yield()之间的区别 - 代码日志