Package com.lmax.disruptor
Class PhasedBackoffWaitStrategy
java.lang.Object
com.lmax.disruptor.PhasedBackoffWaitStrategy
- All Implemented Interfaces:
WaitStrategy
Phased wait strategy for waiting EventProcessor
s on a barrier.
This strategy can be used when throughput and low-latency are not as important as CPU resource. Spins, then yields, then waits using the configured fallback WaitStrategy.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final WaitStrategy
private static final int
private final long
private final long
-
Constructor Summary
ConstructorsConstructorDescriptionPhasedBackoffWaitStrategy
(long spinTimeout, long yieldTimeout, TimeUnit units, WaitStrategy fallbackStrategy) -
Method Summary
Modifier and TypeMethodDescriptionvoid
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.static PhasedBackoffWaitStrategy
withLiteLock
(long spinTimeout, long yieldTimeout, TimeUnit units) ConstructPhasedBackoffWaitStrategy
with fallback toLiteBlockingWaitStrategy
static PhasedBackoffWaitStrategy
ConstructPhasedBackoffWaitStrategy
with fallback toBlockingWaitStrategy
static PhasedBackoffWaitStrategy
ConstructPhasedBackoffWaitStrategy
with fallback toSleepingWaitStrategy
-
Field Details
-
SPIN_TRIES
private static final int SPIN_TRIES- See Also:
-
spinTimeoutNanos
private final long spinTimeoutNanos -
yieldTimeoutNanos
private final long yieldTimeoutNanos -
fallbackStrategy
-
-
Constructor Details
-
PhasedBackoffWaitStrategy
public PhasedBackoffWaitStrategy(long spinTimeout, long yieldTimeout, TimeUnit units, WaitStrategy fallbackStrategy)
-
-
Method Details
-
withLock
public static PhasedBackoffWaitStrategy withLock(long spinTimeout, long yieldTimeout, TimeUnit units) ConstructPhasedBackoffWaitStrategy
with fallback toBlockingWaitStrategy
- Parameters:
spinTimeout
- The maximum time in to busy spin for.yieldTimeout
- The maximum time in to yield for.units
- Time units used for the timeout values.- Returns:
- The constructed wait strategy.
-
withLiteLock
public static PhasedBackoffWaitStrategy withLiteLock(long spinTimeout, long yieldTimeout, TimeUnit units) ConstructPhasedBackoffWaitStrategy
with fallback toLiteBlockingWaitStrategy
- Parameters:
spinTimeout
- The maximum time in to busy spin for.yieldTimeout
- The maximum time in to yield for.units
- Time units used for the timeout values.- Returns:
- The constructed wait strategy.
-
withSleep
public static PhasedBackoffWaitStrategy withSleep(long spinTimeout, long yieldTimeout, TimeUnit units) ConstructPhasedBackoffWaitStrategy
with fallback toSleepingWaitStrategy
- Parameters:
spinTimeout
- The maximum time in to busy spin for.yieldTimeout
- The maximum time in to yield for.units
- Time units used for the timeout values.- Returns:
- The constructed wait strategy.
-
waitFor
public long waitFor(long sequence, Sequence cursor, Sequence dependentSequence, SequenceBarrier barrier) throws AlertException, InterruptedException, TimeoutException 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.InterruptedException
- if the thread is interrupted.TimeoutException
- if a timeout occurs before waiting completes (not used by some strategies)
-
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
-