gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:05:26 26 4
gpt4 key购买 nike

由于Java很早就有了Sleep和Yield,我发现answers适用于该平台,但不适用于.Net

.Net 4 包含新的 Thread.Yield() 静态方法。以前将CPU移交给其他进程的常用方法是Thread.Sleep(0)。

除了 Thread.Yield() 返回 bool 值之外,还有其他性能、操作系统内部差异吗?

例如,我不确定 Thread.Sleep(0) 在将当前线程更改为等待状态之前是否检查其他线程是否准备好运行...如果情况并非如此,当没有其他线程准备好时,Thread.Sleep (0) 看起来比 Thread.Yield() 更糟糕。

最佳答案

正如 Eric Lippert 在他的 Coverity blog 中所解释的那样发布“How does locking work in C#? ”同时演示如何实现锁定——

.NET Framework 为您提供了多种工具,可用于构建更复杂的等待策略:Thread.SpinWait 将处理器置于紧密循环中,允许您等待几纳秒或微秒而不放弃控制权到另一个线程。 Thread.Sleep(0) 将控制权交给任何具有同等优先级的就绪线程,如果没有,则继续当前线程。 Thread.Yield 将控制权交给与当前处理器关联的任何就绪线程。正如我们所看到的,Thread.Sleep(1) 将控制权交给操作系统选择的任何就绪线程。通过仔细选择这些调用的组合并在实际条件下进行性能测试,您可以构建高性能的实现,当然这就是 CLR 团队实际所做的事情。

关于.net - Thread.Sleep(0) 和 Thread.Yield() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2956961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com