针对不同的应用场景,为了尽量提高处理性能,Disruptor提供了SingleProducerSequencer和MultiProducerSequencer两种sequencer,分别对应单生产者模式和多生产者模式。
- SingleProducerSequencer
在单生产者模式中,由于只有一个生产者,所以在获取下一个可用序列号时,不会存在多线程竞争的情况,所以直接用一个long类型变量nextSequence,而没有使用Sequence,提高了处理速度。
nextValue变量定义如下:
abstract class SingleProducerSequencerPad extends AbstractSequencer
{
protected long p1, p2, p3, p4, p5, p6, p7;
SingleProducerSequencerPad(int bufferSize, WaitStrategy waitStrategy)
{
super(bufferSize, waitStrategy);
}
}
abstract class SingleProducerSequencerFields extends SingleProducerSequencerPad
{
SingleProducerSequencerFields(int bufferSize, WaitStrategy waitStrategy)
{
super(bufferSize, waitStrategy);
}
/**
* Set to -1 as sequence starting point
*/
long nextValue = Sequence.INITIAL_VALUE;
long cachedValue = Sequence.INITIAL_VALUE;
}
next方法定义如下:
/**
* @see Sequencer#next()
*/
@Override
public long next()
{
&n

Disruptor为单生产者和多生产者场景提供Sequencer实现,提升处理性能。SingleProducerSequencer通过nextSequence变量避免线程竞争,提高效率;而MultiProducerSequencer利用Sequence和CAS确保多线程环境下序列号更新的线程安全,但牺牲了速度。
最低0.47元/天 解锁文章
1247

被折叠的 条评论
为什么被折叠?



