Package com.lmax.disruptor
Class SleepingWaitStrategy
java.lang.Object
com.lmax.disruptor.SleepingWaitStrategy
- All Implemented Interfaces:
WaitStrategy
Sleeping strategy that initially spins, then uses a Thread.yield(), and
eventually sleep (
LockSupport.parkNanos(n)
) for the minimum
number of nanos the OS and JVM will allow while the
EventProcessor
s are waiting on a barrier.
This strategy is a good compromise between performance and CPU resource. Latency spikes can occur after quiet periods. It will also reduce the impact on the producing thread as it will not need signal any conditional variables to wake up the event handling thread.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final int
private static final long
private final int
private final long
-
Constructor Summary
ConstructorsConstructorDescriptionSleepingWaitStrategy
(int retries) SleepingWaitStrategy
(int retries, long sleepTimeNs) -
Method Summary
Modifier and TypeMethodDescriptionprivate int
applyWaitMethod
(SequenceBarrier barrier, int counter) void
Implementations should signal the waitingEventProcessor
s that the cursor has advanced.long
waitFor
(long sequence, Sequence cursor, Sequence dependentSequence, SequenceBarrier barrier) Wait for the given sequence to be available.
-
Field Details
-
DEFAULT_RETRIES
private static final int DEFAULT_RETRIES- See Also:
-
DEFAULT_SLEEP
private static final long DEFAULT_SLEEP- See Also:
-
retries
private final int retries -
sleepTimeNs
private final long sleepTimeNs
-
-
Constructor Details
-
SleepingWaitStrategy
public SleepingWaitStrategy() -
SleepingWaitStrategy
public SleepingWaitStrategy(int retries) -
SleepingWaitStrategy
public SleepingWaitStrategy(int retries, long sleepTimeNs)
-
-
Method Details
-
waitFor
public long waitFor(long sequence, Sequence cursor, Sequence dependentSequence, SequenceBarrier barrier) throws AlertException Description copied from interface:WaitStrategy
Wait for the given sequence to be available. It is possible for this method to return a value less than the sequence number supplied depending on the implementation of the WaitStrategy. A common use for this is to signal a timeout. Any EventProcessor that is using a WaitStrategy to get notifications about message becoming available should remember to handle this case. TheBatchEventProcessor
explicitly handles this case and will signal a timeout if required.- Specified by:
waitFor
in interfaceWaitStrategy
- Parameters:
sequence
- to be waited on.cursor
- the main sequence from ringbuffer. Wait/notify strategies will need this as it's the only sequence that is also notified upon update.dependentSequence
- on which to wait.barrier
- the processor is waiting on.- Returns:
- the sequence that is available which may be greater than the requested sequence.
- Throws:
AlertException
- if the status of the Disruptor has changed.
-
signalAllWhenBlocking
public void signalAllWhenBlocking()Description copied from interface:WaitStrategy
Implementations should signal the waitingEventProcessor
s that the cursor has advanced.- Specified by:
signalAllWhenBlocking
in interfaceWaitStrategy
-
applyWaitMethod
- Throws:
AlertException
-