ManualResetEventSlim建议等待时间

本文关键字:等待时间 ManualResetEventSlim | 更新日期: 2023-09-27 18:09:35

ManualResetEventSlim状态的MSDN文档

当等待时间预期非常短时,您可以使用该类以获得比ManualResetEvent更好的性能。

"非常短"是多长?在什么情况下,使用带有ManualResetEvent的内核对象的好处会超过实例化它的开销?

ManualResetEventSlim建议等待时间

这是我发现的,希望其他人来验证这一点,但这是我在阅读ManualResetEventSlim参考源代码时发现的

ManualResetEventSlim
它试图根据处理器的数量进行休眠和生成,并且进行极短的休眠——根据当前的自旋指数,休眠时间为1毫秒或0毫秒。如果仍然没有足够的时间,那么它将使用最初传入的超时的新更新版本恢复到使用Monitor.Wait

为线程传入0。睡眠可以缓解时间碎片

ManualResetEvent
它使用WaitHandle并调用本机方法来处理指定时间的等待。遗憾的是,我无法看到它在做什么。

我的结论
"非常短"意味着只有几毫秒。

编辑:我刚发现这些有很多信息:

  • ManualResetEventSlim

  • http://social.msdn.microsoft.com/forums/vstudio/en us/9ce62320 - 68 - fe - 4 - d07 - 8576 - f30a0325a68c/when -使用- manualreseteventslim?forum=parallelextensions

从CPU缓存到RAM再到内核的比例近似为对数。假设您可以使用CPU缓存执行400个周期,或者使用读/写RAM或1个内核操作执行20个CPU周期。具体数字取决于硬件,这只是一个估计。

如果你认为最大等待时间将小于6-15 ns (~20-50 CPU周期@ 3GHz),那么这是一个小的等待时间。