Package org.agrona.concurrent
Class BusySpinIdleStrategy
java.lang.Object
org.agrona.concurrent.BusySpinIdleStrategy
- All Implemented Interfaces:
IdleStrategy
Busy spin strategy targeted at lowest possible latency. This strategy will monopolise a thread to achieve the lowest
possible latency. Useful for creating bubbles in the execution pipeline of tight busy spin loops with no other logic
than status checks on progress.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringName to be returned fromalias().static final BusySpinIdleStrategyAs there is no instance state then this object can be used to save on allocation. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionalias()Simple name by which the strategy can be identified.voididle()Perform current idle action (e.g.voididle(int workCount) Note: this implementation will result in no safepoint poll once inlined.voidreset()Reset the internal state in preparation for entering an idle state again.toString()
-
Field Details
-
ALIAS
Name to be returned fromalias().- See Also:
-
INSTANCE
As there is no instance state then this object can be used to save on allocation.
-
-
Constructor Details
-
BusySpinIdleStrategy
public BusySpinIdleStrategy()Create a new instance.
-
-
Method Details
-
idle
public void idle(int workCount) Note: this implementation will result in no safepoint poll once inlined.Perform current idle action (e.g. nothing/yield/sleep). This method signature expects users to call into it on every work 'cycle'. The implementations may use the indication "workCount > 0" to reset internal backoff state. This method works well with 'work' APIs which follow the following rules:
- 'work' returns a value larger than 0 when some work has been done
- 'work' returns 0 when no work has been done
- 'work' may return error codes which are less than 0, but which amount to no work has been done
Callers are expected to follow this pattern:
while (isRunning) { idleStrategy.idle(doWork()); }- Specified by:
idlein interfaceIdleStrategy- Parameters:
workCount- performed in last duty cycle.
-
idle
public void idle()Perform current idle action (e.g. nothing/yield/sleep). To be used in conjunction withIdleStrategy.reset()to clear internal state when idle period is over (or before it begins). Callers are expected to follow this pattern:while (isRunning) { if (!hasWork()) { idleStrategy.reset(); while (!hasWork()) { if (!isRunning) { return; } idleStrategy.idle(); } } doWork(); }- Specified by:
idlein interfaceIdleStrategy
-
reset
public void reset()Reset the internal state in preparation for entering an idle state again.- Specified by:
resetin interfaceIdleStrategy
-
alias
Simple name by which the strategy can be identified.- Specified by:
aliasin interfaceIdleStrategy- Returns:
- simple name by which the strategy can be identified.
-
toString
-