gpt4 book ai didi

c# - ManualResetEventSlim 中单次旋转需要多长时间

转载 作者:可可西里 更新时间:2023-11-01 07:49:50 27 4
gpt4 key购买 nike

C# 中单次自旋有多长?我想知道的是有一个 ManualResetEventSlim 有一个 spinCount 参数,我想知道每次旋转的时间(以毫秒为单位)或者它是如何工作的?我知道旋转对于短等待比内核等待更有效。所以我只是想看看我应该为通常需要 2-10 秒的工作设置这个值。

最佳答案

构造函数中的 spinCount 参数与自旋等待所花费的毫秒数之间没有关联。

这是它的工作原理。 MRES 使用此 spinCount 参数独立于 Thread.SpinWait 完成自己的等待例程。

  • 前 10 次迭代交替调用 Thread.YieldThread.SpinWait。对 Thread.SpinWait 的调用以 Environment.ProcessorCount * 4 的自旋开始,然后在每次连续调用时大约翻倍。
  • 此后每次迭代可被 20 整除调用 Thread.Sleep(1)
  • 否则那些能被 5 整除的调用 Thread.Sleep(0)
  • 否则调用Thread.Yield
  • CancellationToken 在 100 次迭代后每 10 次迭代检查一次。

正如您所见,在 MRES 的自定义纺纱程序中进行着相当复杂的歌舞表演。算法可能会因版本而异。确实没有办法预测每次旋转会持续多长时间。

如果您的典型等待时间是 2-10 秒,那么您的代码几乎肯定会通过 Monitor.WaitMonitor.Pulse 协调进行内核级等待,因为spinCount 参数无论如何都限制为 2047。

另外,2-10 秒是很长的时间。你真的想旋转那么久吗?

关于c# - ManualResetEventSlim 中单次旋转需要多长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304854/

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