java.lang.Object
cn.wjybxx.disruptor.MpUnboundedBuffer<E>
- 所有已实现的接口:
DataProvider<E>
多生产者的无界缓冲区
注意:
1. 该缓冲区不是为性能而设计的,它的主要是目的是避免死锁。该缓冲区应当用于内部系统交互,
而不应该用于与外部系统交互,对外的缓冲区都应该是有界的。
2. 该缓存不会自动回收和复用块,需要外部显式调用回收 -- Sequencer需要负责回收。
2. 该缓存不会自动回收和复用块,需要外部显式调用回收 -- Sequencer需要负责回收。
- 作者:
- wjybxx date - 2024/1/18
-
字段概要
字段 -
构造器概要
构造器 -
方法概要
修饰符和类型方法说明longchunkIndexForSequence(long sequence) 获取sequence对应的chunk的indexint单个块大小voidclaim(long sequence) 只能用在初始化的时候consumerChunkForSequence(long sequence) 获取消费者sequence对应的chunkconsumerGet(long sequence) 该接口用于优化消费者查询数据voidconsumerSet(long sequence, E data) 该接口用于消费者覆盖数据(通常用于删除数据) 1.当使用无界队列需要即时清理内存时使用。get(long sequence) 根据指定序号获取data 该接口可用于生产者和消费者获取数据,但对于非固定大小的数据结构而言,可能有较长的查询路径。booleaninSameChunk(long seq1, long seq2) 判断两个sequence是否落在同一个chunkint缓存chunk数producerChunkForSequence(long sequence) 获取生产者sequence对应的chunk -- 生产者再获得序号后应当调用该方法触发扩容producerGet(long sequence) 该接口用于优化生产者查询数据voidproducerSet(long sequence, E data) 该接口用于生产者填充数据 1.booleantryMoveHeadToNext(long gatingSequence) 尝试将head更新到下一个chunk (public以允许用户自行控制回收时机)
-
字段详细资料
-
ROTATION
该引用表示生产者或消费者块正在执行更新
-
-
构造器详细资料
-
MpUnboundedBuffer
- 参数:
chunkSize- 单个块大小maxPooledChunks- 缓存块数量factory- 事件工厂
-
-
方法详细资料
-
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
从接口复制的说明:DataProvider根据指定序号获取data 该接口可用于生产者和消费者获取数据,但对于非固定大小的数据结构而言,可能有较长的查询路径。- 指定者:
get在接口中DataProvider<E>
-
producerGet
从接口复制的说明:DataProvider该接口用于优化生产者查询数据- 指定者:
producerGet在接口中DataProvider<E>
-
consumerGet
从接口复制的说明:DataProvider该接口用于优化消费者查询数据- 指定者:
consumerGet在接口中DataProvider<E>
-
producerSet
从接口复制的说明:DataProvider该接口用于生产者填充数据 1. 当拷贝既有数据成本较高时可替换既有对象 2. set不提供特殊的内存语义,因此只应该生产者调用- 指定者:
producerSet在接口中DataProvider<E>
-
consumerSet
从接口复制的说明:DataProvider该接口用于消费者覆盖数据(通常用于删除数据) 1.当使用无界队列需要即时清理内存时使用。 2.set不提供特殊的内存语义,因此只应该由末尾的消费者调用- 指定者:
consumerSet在接口中DataProvider<E>
-
producerChunkForSequence
获取生产者sequence对应的chunk -- 生产者再获得序号后应当调用该方法触发扩容 -
consumerChunkForSequence
获取消费者sequence对应的chunk -
tryMoveHeadToNext
public boolean tryMoveHeadToNext(long gatingSequence) 尝试将head更新到下一个chunk (public以允许用户自行控制回收时机)- 参数:
gatingSequence- 最慢的消费者进度(已消费)- 返回:
- 是否成功触发回收
-