- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
C# 中单次自旋有多长?我想知道的是有一个 ManualResetEventSlim 有一个 spinCount 参数,我想知道每次旋转的时间(以毫秒为单位)或者它是如何工作的?我知道旋转对于短等待比内核等待更有效。所以我只是想看看我应该为通常需要 2-10 秒的工作设置这个值。
最佳答案
构造函数中的 spinCount
参数与自旋等待所花费的毫秒数之间没有关联。
这是它的工作原理。 MRES 使用此 spinCount
参数独立于 Thread.SpinWait
完成自己的等待例程。
Thread.Yield
和 Thread.SpinWait
。对 Thread.SpinWait
的调用以 Environment.ProcessorCount * 4
的自旋开始,然后在每次连续调用时大约翻倍。Thread.Sleep(1)
。Thread.Sleep(0)
。Thread.Yield
。CancellationToken
在 100 次迭代后每 10 次迭代检查一次。正如您所见,在 MRES 的自定义纺纱程序中进行着相当复杂的歌舞表演。算法可能会因版本而异。确实没有办法预测每次旋转会持续多长时间。
如果您的典型等待时间是 2-10 秒,那么您的代码几乎肯定会通过 Monitor.Wait
和 Monitor.Pulse
协调进行内核级等待,因为spinCount
参数无论如何都限制为 2047。
另外,2-10 秒是很长的时间。你真的想旋转那么久吗?
关于c# - ManualResetEventSlim 中单次旋转需要多长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10304854/
C# 中单次自旋有多长?我想知道的是有一个 ManualResetEventSlim 有一个 spinCount 参数,我想知道每次旋转的时间(以毫秒为单位)或者它是如何工作的?我知道旋转对于短等待比
ManualResetEventSlim 状态的 MSDN 文档 You can use this class for better performance than ManualResetEvent
我正在尝试使用 ManualResetEventSlim 类在几个并行任务之间进行通信。 这是代码的简化版本: class Program { private static void Main
我正在阅读 ManualResetEventSlim's Reference . 它说的是什么意思: A common use of MRES.WaitHandle is to use MRES as
从 NET 4 开始,我可以使用 ManualResetEventSlim 类,它在阻塞之前稍微旋转一下,以便在阻塞时间很短的情况下获得时间优化(我没有上下文切换)。 我想使用基准来衡量这次的时间有多
给定以下代码: CancellationTokenSource cts = new CancellationTokenSource(); ManualResetEventSlim mre = new
ManualResetEventSlim:调用 .Set() 后立即调用 .Reset() 不会释放任何等待线程 (注意:ManualResetEvent 也会发生这种情况,而不仅仅是 ManualR
我是一名优秀的程序员,十分优秀!