Spin-wait 是什么 wound wait 多进程

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 04:10:02
Spin-wait是什么woundwait多进程Spin-wait是什么woundwait多进程Spin-wait是什么woundwait多进程可重用旋转等待(SpinWait)虽然忙碌等待(busy

Spin-wait 是什么 wound wait 多进程
Spin-wait 是什么 wound wait 多进程

Spin-wait 是什么 wound wait 多进程
可重用旋转等待 (Spin Wait)
虽然忙碌等待 (busy waiting) 更容易实现阻塞,但在某些情况下,您也许的确想在退回到真正的等待状态前先旋转 (spin) 一段时间.我们很难理解为何这样做会有帮助,而大多数人之所以一开始就避免旋转等待,是因为旋转看上去像是在做无用功;如果上下文切换(每当线程等待内核事件时都会发生)需要几千个周期(在 Windows 上确实是这样),我们称之为 c,并且线程所等待的条件出现的时间少于 2c 周期时间(1c 用于等待自身,1c 用于唤醒),则旋转可以降低等待所造成的系统开销和滞后时间,从而提升算法的整体吞吐量和可伸缩性.
如果您决定使用旋转等待,就必须谨慎行事.因为如果这样做,您可能需要注意很多问题,比如:要确保在旋转循环内调用 Thread.SpinWait,以提高 Intel 超线程技术的计算机上硬件对其他硬件线程的可用性;偶尔使用参数 1 而非 0 来调用 Thread.Sleep,以避免优先级反向问题;通过轻微的回退 (back-off) 来引入随机选择,从而改善访问的局部性(假定调用方持续重读共享状态)并可能避免活锁;当然,在单 CPU 的计算机最好不要采用这种方法(因为在这种环境下旋转是非常浪费资源的).
SpinWait 类需要被定义为值类型,以便分配起来更加节省资源