Disruptor
文章平均质量分 70
ph3636
这个作者很懒,什么都没留下…
展开
-
Disruptor(1)
1. Disruptor的核心是解决伪共享,通过给填充整个缓存行来达到提高缓存命中率以及提高并发。通过一个环状数据结构实现RingBuffer。主要使用的方式如下,一个存储数据的RingBuffer,一个执行消费的线程生成器public Disruptor(final EventFactory<T> eventFactory, final int ringBufferSize, ...原创 2018-11-29 16:18:28 · 467 阅读 · 0 评论 -
Disruptor(2)
3. RingBuffer#addGatingSequences=》AbstractSequencer#addGatingSequencespublic void addGatingSequences(Sequence... gatingSequences) { sequencer.addGatingSequences(gatingSequences); }...原创 2018-11-29 17:12:28 · 155 阅读 · 0 评论 -
Disruptor(3)
5. 通过ProcessingSequenceBarrier#waitFor来获取可以消费的下标。检查警告标志是否正常,public long waitFor(final long sequence) throws AlertException, InterruptedException, TimeoutException { checkAlert()...原创 2018-11-29 18:28:13 · 533 阅读 · 0 评论 -
Disruptor源码分析之初始化
Disruptor的核心是解决伪共享,通过给填充整个缓存行来达到提高缓存命中率以及提高并发。通过一个环状数据结构实现RingBuffer。主要使用的方式如下,一个存储数据的RingBuffer,一个执行消费的线程生成器。public Disruptor(final EventFactory<T> eventFactory, final int ringBufferSize, f...原创 2019-06-03 12:28:02 · 388 阅读 · 0 评论 -
Disruptor源码分析之提供端
提供端发布消息public void publishEvent(final EventTranslator<T> eventTranslator){ ringBuffer.publishEvent(eventTranslator);}public void publishEvent(EventTranslator<E> translator){ ...原创 2019-06-03 12:30:35 · 155 阅读 · 0 评论 -
Disruptor源码分析之消费端
启动Disruptor,原子类型判断启动状态,只能启动一次,ConsumerRepository实现了Iterable接口,则遍历的是consumerInfos集合public RingBuffer<T> start(){ checkOnlyStartedOnce(); for (final ConsumerInfo consumerInfo : consume...原创 2019-06-03 12:32:54 · 278 阅读 · 0 评论 -
Disruptor源码分析之其他功能
单生产者SingleProducerSequencer单生产者类,nextValue代表当前的下标,nextSequence代表这次需要的下标,与多生产者类似,只是不需要循环重试,因为只有一个生产者产生数据,所以只需要一次判断就可以,没什么并发问题。public long next(int n){ if (n < 1 || n > bufferSize) ...原创 2019-06-03 12:35:27 · 251 阅读 · 0 评论