Disruptor 源码分析(8) 生产者和消费者默认的等待策略

[size=medium]disruptor生产者和消费者默认的等待策略

生产者和消费者都可能出现速度过快,追上对方的情况,这个时候就需要等待了.等待过程中也会有不同的策略.

生产者的默认策略是BlockingWaitStrategy,是在RingBuffer中确定的.但是生产者的默认实现MultiProducerSequencer没有使用等待策略.[/size]

if (wrapPoint > gatingSequence)
{
LockSupport.parkNanos(1);
continue;
}

[size=medium]生产者是通过 LockSupport.parkNanos(1); 来等待的.


消费者的默认策略是
BatchEventProcessor的run方法[/size]

 public void run()
{
final long availableSequence = sequenceBarrier.waitFor(nextSequence);


[size=medium]可以看到是由SequenceBarrier来决定的
Disruptor类中
final SequenceBarrier barrier = ringBuffer.newBarrier(barrierSequences);

SequenceBarrier是由ringBuffer决定的
[/size]

 public SequenceBarrier newBarrier(Sequence... sequencesToTrack)
{
return sequencer.newBarrier(sequencesToTrack);
}


[size=medium]看一看到最后是有sequencer来决定的
[/size]
 public SequenceBarrier newBarrier(Sequence... sequencesToTrack)
{
return new ProcessingSequenceBarrier(this, waitStrategy, cursor, sequencesToTrack);
}

[size=medium]这里的waitStrategy就是sequencer的waitStrategy.默认的sequencer是MultiProducerSequencer.[/size]

 public static <E> RingBuffer<E> createMultiProducer(EventFactory<E> factory, int bufferSize)
{
return createMultiProducer(factory, bufferSize, new BlockingWaitStrategy());
}

[size=medium]MultiProducerSequencer的默认策略是BlockingWaitStrategy.

sequencer其实就是生产者,所以其实消费者的默认策略和生产者是一样的.[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值