java.lang.Object
cn.wjybxx.disruptor.SequenceBlocker
序号阻塞器
在Disruptor的设计中,消费者只会条件等待生产者的序号发布,而不会条件等待前置消费者的序号发布,生产者也不会条件等待gating消费者的序号发布。 这有一定的缺陷,但我将沿用这个设定,有以下理由: 1. 生产者和消费者会构成复杂的回路,使用条件锁将极大增加wait/notify的复杂度,死锁风险高。 2. 彼此都使用条件锁通知,会产生大量的notify调用,这对吞吐量会造成影响。
原始设计的缺陷是什么? 1. 由于只支持消费者可条件等待生产者,其它情况下的依赖都是通过观察sequence的更新实现的。 2. 当使用Blocking策略时,如果当前消费者速度较快,而前置消费者速度很慢,那么消费者会消耗大量的CPU等待序号可用。 3. Disruptor不支持每一级消费者使用不同的等待策略,因此这个问题需要重写Blocking策略实现 -- 将等待前置消费者的部分修改为sleep模式。
- 作者:
- wjybxx date - 2024/1/17
-
构造器概要
构造器 -
方法概要
-
构造器详细资料
-
SequenceBlocker
public SequenceBlocker()
-
-
方法详细资料
-
lock
public void lock() -
unlock
public void unlock() -
await
-
awaitNanos
- 返回:
- 剩余需要等待的时间
- 抛出:
InterruptedException
-
await
-
signalAll
public void signalAll()唤醒等待中的线程。 注意: 1.该接口由该屏障的上游或第三方在停止时调用。 2.唤醒不意味着等待的序号已变为可用,在醒来后需要检查中断和终止信号。 3.由于消费者共用一个Blocker,因此还会受到其它消费者的牵连。
-