类 MpUnboundedBuffer<E>

java.lang.Object
cn.wjybxx.disruptor.MpUnboundedBuffer<E>
所有已实现的接口:
DataProvider<E>

public final class MpUnboundedBuffer<E> extends Object implements DataProvider<E>
多生产者的无界缓冲区 注意: 1. 该缓冲区不是为性能而设计的,它的主要是目的是避免死锁。该缓冲区应当用于内部系统交互,而不应该用于与外部系统交互,对外的缓冲区都应该是有界的。 2. 该缓存不会自动回收和复用块,需要外部显式调用回收 -- Sequencer需要负责回收。
作者:
wjybxx date - 2024/1/18
  • 字段概要

    字段
    修饰符和类型
    字段
    说明
    protected static final MpUnboundedBufferChunk<?>
    该引用表示生产者或消费者块正在执行更新
  • 构造器概要

    构造器
    构造器
    说明
    MpUnboundedBuffer(EventFactory<? extends E> factory, int chunkSize, int maxPooledChunks)
     
  • 方法概要

    修饰符和类型
    方法
    说明
    long
    chunkIndexForSequence(long sequence)
    获取sequence对应的chunk的index
    int
    单个块大小
    void
    claim(long sequence)
    只能用在初始化的时候
    consumerChunkForSequence(long sequence)
    获取消费者sequence对应的chunk
    consumerGet(long sequence)
    该接口用于优化消费者查询数据
    void
    consumerSet(long sequence, E data)
    该接口用于消费者覆盖数据(通常用于删除数据) 1.当使用无界队列需要即时清理内存时使用。
    get(long sequence)
    根据指定序号获取data 该接口可用于生产者和消费者获取数据,但对于非固定大小的数据结构而言,可能有较长的查询路径。
    boolean
    inSameChunk(long seq1, long seq2)
    判断两个sequence是否落在同一个chunk
    int
    缓存chunk数
    producerChunkForSequence(long sequence)
    获取生产者sequence对应的chunk -- 生产者再获得序号后应当调用该方法触发扩容
    producerGet(long sequence)
    该接口用于优化生产者查询数据
    void
    producerSet(long sequence, E data)
    该接口用于生产者填充数据 1.
    boolean
    tryMoveHeadToNext(long gatingSequence)
    尝试将head更新到下一个chunk (public以允许用户自行控制回收时机)

    从类继承的方法 java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 字段详细资料

    • ROTATION

      protected static final MpUnboundedBufferChunk<?> ROTATION
      该引用表示生产者或消费者块正在执行更新
  • 构造器详细资料

    • MpUnboundedBuffer

      public MpUnboundedBuffer(EventFactory<? extends E> factory, int chunkSize, int maxPooledChunks)
      参数:
      factory - 事件工厂
      chunkSize - 单个块大小
      maxPooledChunks - 缓存块数量
  • 方法详细资料

    • claim

      public void claim(long sequence)
      只能用在初始化的时候
    • chunkSize

      public int chunkSize()
      单个块大小
    • maxPooledChunks

      public int maxPooledChunks()
      缓存chunk数
    • chunkIndexForSequence

      public long chunkIndexForSequence(long sequence)
      获取sequence对应的chunk的index
    • inSameChunk

      public boolean inSameChunk(long seq1, long seq2)
      判断两个sequence是否落在同一个chunk
    • get

      public E get(long sequence)
      从接口复制的说明: DataProvider
      根据指定序号获取data 该接口可用于生产者和消费者获取数据,但对于非固定大小的数据结构而言,可能有较长的查询路径。
      指定者:
      get 在接口中 DataProvider<E>
    • producerGet

      public E producerGet(long sequence)
      从接口复制的说明: DataProvider
      该接口用于优化生产者查询数据
      指定者:
      producerGet 在接口中 DataProvider<E>
    • consumerGet

      public E consumerGet(long sequence)
      从接口复制的说明: DataProvider
      该接口用于优化消费者查询数据
      指定者:
      consumerGet 在接口中 DataProvider<E>
    • producerSet

      public void producerSet(long sequence, E data)
      从接口复制的说明: DataProvider
      该接口用于生产者填充数据 1. 当拷贝既有数据成本较高时可替换既有对象 2. set不提供特殊的内存语义,因此只应该生产者调用
      指定者:
      producerSet 在接口中 DataProvider<E>
    • consumerSet

      public void consumerSet(long sequence, E data)
      从接口复制的说明: DataProvider
      该接口用于消费者覆盖数据(通常用于删除数据) 1.当使用无界队列需要即时清理内存时使用。 2.set不提供特殊的内存语义,因此只应该由末尾的消费者调用
      指定者:
      consumerSet 在接口中 DataProvider<E>
    • producerChunkForSequence

      public MpUnboundedBufferChunk<E> producerChunkForSequence(long sequence)
      获取生产者sequence对应的chunk -- 生产者再获得序号后应当调用该方法触发扩容
    • consumerChunkForSequence

      public MpUnboundedBufferChunk<E> consumerChunkForSequence(long sequence)
      获取消费者sequence对应的chunk
    • tryMoveHeadToNext

      public boolean tryMoveHeadToNext(long gatingSequence)
      尝试将head更新到下一个chunk (public以允许用户自行控制回收时机)
      参数:
      gatingSequence - 最慢的消费者进度(已消费)
      返回:
      是否成功触发回收