Package org.jctools.channels
Class OffHeapFixedMessageSizeRingBuffer
java.lang.Object
org.jctools.channels.proxy.ProxyChannelRingBuffer
org.jctools.channels.OffHeapFixedMessageSizeRingBuffer
- Direct Known Subclasses:
MpscFFLamportOffHeapFixedSizeRingBuffer
,MpscOffHeapFixedSizeRingBuffer
,SpscOffHeapFixedSizeRingBuffer
Channel protocol:
- Fixed message size
- 'null' indicator in message preceding byte (potentially use same for type mapping in future)
- Use FF algorithm relying on indicator to support in place detection of next element existence
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final long
private final ByteBuffer
protected final long
static final int
protected final long
static final byte
protected final int
protected final long
static final int
static final int
protected final int
protected final Object[]
static final int
static final int
Fields inherited from class org.jctools.channels.proxy.ProxyChannelRingBuffer
EOF
-
Constructor Summary
ConstructorsModifierConstructorDescriptionOffHeapFixedMessageSizeRingBuffer
(int capacity, int primitiveMessageSize, int referenceMessageSize) protected
OffHeapFixedMessageSizeRingBuffer
(ByteBuffer buff, int capacity, boolean isProducer, boolean isConsumer, boolean initialize, int primitiveMessageSize, Object[] references, int referenceMessageSize) This is to be used for an IPC queue with the direct buffer used being a memory mapped file. -
Method Summary
Modifier and TypeMethodDescriptionprotected final long
arrayIndexForCursor
(long currentHead) protected static long
arrayIndexForCursor
(long mask, int referenceMessageSize, long currentHead) final int
capacity()
protected long
consumerReferenceArrayIndex
(long offset) Get the position index of the consumer in the reference arrayprotected static Object[]
createReferenceArray
(int capacity, int referenceMessageSize) static int
getRequiredArraySize
(int capacity, int primitiveMessageSize) static int
getRequiredBufferSize
(int capacity, int messageSize) final boolean
isEmpty()
protected final boolean
isReadReleased
(long offset) protected final long
protected final long
protected final long
protected final long
protected final long
offsetForIndex
(long currentHead) protected static long
offsetForIndex
(long bufferAddress, long mask, int messageSize, long currentHead) protected long
producerReferenceArrayIndex
(long offset) Get the position index of the producer in the reference arrayprotected abstract long
Acquire an offset to read fromprotected final void
readAcquireState
(long offset) protected Object
readReference
(long offset) Read a reference at the given positionprotected abstract void
readRelease
(long offset) Release the offset from readingprotected final void
readReleaseState
(long offset) protected final long
relativeIndexForOffset
(long offset) protected static long
relativeIndexForOffset
(long bufferAddress, int messageSize, long offset) Computes an index relative to the buffer start for an offset.final int
size()
protected final void
soConsumerIndex
(long value) protected final void
soProducerIndex
(long value) protected abstract long
Acquire an offset to write to.protected final void
writeAcquireState
(long offset) protected void
writeReference
(long offset, Object reference) Write a reference to the given positionprotected abstract void
writeRelease
(long offset) protected final void
writeReleaseState
(long offset) Methods inherited from class org.jctools.channels.proxy.ProxyChannelRingBuffer
writeRelease
-
Field Details
-
READ_RELEASE_INDICATOR
public static final int READ_RELEASE_INDICATOR- See Also:
-
READ_ACQUIRE_INDICATOR
public static final int READ_ACQUIRE_INDICATOR- See Also:
-
WRITE_RELEASE_INDICATOR
public static final int WRITE_RELEASE_INDICATOR- See Also:
-
WRITE_ACQUIRE_INDICATOR
public static final int WRITE_ACQUIRE_INDICATOR- See Also:
-
MESSAGE_INDICATOR_SIZE
public static final byte MESSAGE_INDICATOR_SIZE- See Also:
-
HEADER_SIZE
public static final int HEADER_SIZE -
buffy
-
bufferAddress
protected final long bufferAddress -
consumerIndexAddress
protected final long consumerIndexAddress -
producerIndexAddress
protected final long producerIndexAddress -
mask
protected final long mask -
messageSize
protected final int messageSize -
references
-
referenceMessageSize
protected final int referenceMessageSize
-
-
Constructor Details
-
OffHeapFixedMessageSizeRingBuffer
public OffHeapFixedMessageSizeRingBuffer(int capacity, int primitiveMessageSize, int referenceMessageSize) -
OffHeapFixedMessageSizeRingBuffer
protected OffHeapFixedMessageSizeRingBuffer(ByteBuffer buff, int capacity, boolean isProducer, boolean isConsumer, boolean initialize, int primitiveMessageSize, Object[] references, int referenceMessageSize) This is to be used for an IPC queue with the direct buffer used being a memory mapped file.- Parameters:
buff
-capacity
- in messages, actual capacity will beprimitiveMessageSize
-
-
-
Method Details
-
getRequiredBufferSize
public static int getRequiredBufferSize(int capacity, int messageSize) -
createReferenceArray
-
getRequiredArraySize
public static int getRequiredArraySize(int capacity, int primitiveMessageSize) -
capacity
public final int capacity() -
size
public final int size() -
isEmpty
public final boolean isEmpty() -
isReadReleased
protected final boolean isReadReleased(long offset) -
writeReleaseState
protected final void writeReleaseState(long offset) -
readReleaseState
protected final void readReleaseState(long offset) -
writeAcquireState
protected final void writeAcquireState(long offset) -
readAcquireState
protected final void readAcquireState(long offset) -
offsetForIndex
protected final long offsetForIndex(long currentHead) -
offsetForIndex
protected static long offsetForIndex(long bufferAddress, long mask, int messageSize, long currentHead) -
relativeIndexForOffset
protected final long relativeIndexForOffset(long offset) -
relativeIndexForOffset
protected static long relativeIndexForOffset(long bufferAddress, int messageSize, long offset) Computes an index relative to the buffer start for an offset. This does not recover the original index because that is a very hard problem.- Parameters:
bufferAddress
-messageSize
-offset
-- Returns:
-
lpConsumerIndex
protected final long lpConsumerIndex() -
lvConsumerIndex
protected final long lvConsumerIndex() -
soConsumerIndex
protected final void soConsumerIndex(long value) -
lpProducerIndex
protected final long lpProducerIndex() -
lvProducerIndex
protected final long lvProducerIndex() -
soProducerIndex
protected final void soProducerIndex(long value) -
arrayIndexForCursor
protected final long arrayIndexForCursor(long currentHead) -
arrayIndexForCursor
protected static long arrayIndexForCursor(long mask, int referenceMessageSize, long currentHead) -
consumerReferenceArrayIndex
protected long consumerReferenceArrayIndex(long offset) Description copied from class:ProxyChannelRingBuffer
Get the position index of the consumer in the reference array- Specified by:
consumerReferenceArrayIndex
in classProxyChannelRingBuffer
- Parameters:
offset
- the current offset of the consumer returned fromProxyChannelRingBuffer.readAcquire()
- Returns:
- the consumer index
-
producerReferenceArrayIndex
protected long producerReferenceArrayIndex(long offset) Description copied from class:ProxyChannelRingBuffer
Get the position index of the producer in the reference array- Specified by:
producerReferenceArrayIndex
in classProxyChannelRingBuffer
- Parameters:
offset
- the current offset of the producer returned fromProxyChannelRingBuffer.writeAcquire()
- Returns:
- the producer index
-
writeReference
Write a reference to the given position- Specified by:
writeReference
in classProxyChannelRingBuffer
- Parameters:
offset
- index into the reference arrayreference
-
-
readReference
Read a reference at the given position- Specified by:
readReference
in classProxyChannelRingBuffer
- Parameters:
offset
- index into the reference array- Returns:
-
readAcquire
protected abstract long readAcquire()Description copied from class:ProxyChannelRingBuffer
Acquire an offset to read from- Specified by:
readAcquire
in classProxyChannelRingBuffer
- Returns:
- a base address for a message acquired to be read, or EOF if none is available
-
readRelease
protected abstract void readRelease(long offset) Description copied from class:ProxyChannelRingBuffer
Release the offset from reading- Specified by:
readRelease
in classProxyChannelRingBuffer
- Parameters:
offset
- the base address of a message that we are done reading and can be overwritten now
-
writeAcquire
protected abstract long writeAcquire()Description copied from class:ProxyChannelRingBuffer
Acquire an offset to write to. If there's no space available a wait strategy may be used.- Specified by:
writeAcquire
in classProxyChannelRingBuffer
- Returns:
- a base address for a message acquired to be written, or EOF if none is available
-
writeRelease
protected abstract void writeRelease(long offset) - Parameters:
offset
- the base address of a message that we are done writing and can be read now
-