Disruptor-等待策略

BlockingWaitStrategy

Disruptor默认策略

EventProcessor使用等待条件的锁和条件变量的阻塞策略。

当吞吐量和低延迟不如CPU资源那么重要时,可以使用此策略。

LiteBlockingWaitStrategy

BlockingWaitStrategy的变体,在无竞争的情况下尝试消除条件唤醒。 显示微基准测试的性能改进。

但是,由于我尚未完全证明锁省略码的正确性,因此应将这种等待策略视为实验性的。

BusySpinWaitStrategy

繁忙旋转策略,该繁忙旋转策略对EventProcessor的障碍使用繁忙的旋转循环。

此策略将使用CPU资源来避免可能导致延迟抖动的系统调用。 最好当线程可以绑定到特定的CPU内核时使用。

TimeoutBlockingWaitStrategy

LiteTimeoutBlockingWaitStrategy

TimeoutBlockingWaitStrategy的变体,在无竞争的情况下尝试消除条件唤醒。

PhasedBackoffWaitStrategy

在屏障上等待EventProcessor的分阶段等待策略。

当吞吐量和低延迟不如CPU资源那么重要时,可以使用此策略。 旋转,然后屈服,然后使用配置的后备WaitStrategy等待。

SleepingWaitStrategy

最初启动的休眠策略,然后使用Thread.yield(),最后在EventProcessor等待屏障时,休眠操作系统和JVM将允许的最小数量的nanos。

此策略是性能和CPU资源之间的良好折衷。 安静时段后可能会出现延迟峰值。 这也将减少对生产线程的影响,因为它不需要发出信号通知任何条件变量来唤醒事件处理线程。

YieldingWaitStrategy

在初始旋转后,使用Thread.yield()的EventProcessor在屏障上等待。

如果其他线程需要CPU资源,则此策略将使用100%CPU,但比忙碌的自旋策略更容易放弃CPU。