Package org.agrona.concurrent
Class SleepingIdleStrategy
- java.lang.Object
-
- org.agrona.concurrent.SleepingIdleStrategy
-
- All Implemented Interfaces:
IdleStrategy
public final class SleepingIdleStrategy extends java.lang.Object implements IdleStrategy
When idle this strategy is to sleep for a specified period in nanoseconds.This class uses
LockSupport.parkNanos(long)
to idle.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ALIAS
Name to be returned fromalias()
.static long
DEFAULT_SLEEP_PERIOD_NS
Default sleep period that tends to work as the likely minimum on Linux to be effective.private long
sleepPeriodNs
-
Constructor Summary
Constructors Constructor Description SleepingIdleStrategy()
Default constructor usingDEFAULT_SLEEP_PERIOD_NS
.SleepingIdleStrategy(long sleepPeriodNs)
Constructed a new strategy that will sleep for a given period when idle.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
alias()
Simple name by which the strategy can be identified.void
idle()
Perform current idle action (e.g.void
idle(int workCount)
Perform current idle action (e.g.void
reset()
Reset the internal state in preparation for entering an idle state again.java.lang.String
toString()
-
-
-
Field Detail
-
ALIAS
public static final java.lang.String ALIAS
Name to be returned fromalias()
.- See Also:
- Constant Field Values
-
DEFAULT_SLEEP_PERIOD_NS
public static final long DEFAULT_SLEEP_PERIOD_NS
Default sleep period that tends to work as the likely minimum on Linux to be effective.- See Also:
- Constant Field Values
-
sleepPeriodNs
private final long sleepPeriodNs
-
-
Constructor Detail
-
SleepingIdleStrategy
public SleepingIdleStrategy()
Default constructor usingDEFAULT_SLEEP_PERIOD_NS
.
-
SleepingIdleStrategy
public SleepingIdleStrategy(long sleepPeriodNs)
Constructed a new strategy that will sleep for a given period when idle.- Parameters:
sleepPeriodNs
- period in nanosecond for which the strategy will sleep when work count is 0.
-
-
Method Detail
-
idle
public void idle(int workCount)
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:
idle
in 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:
idle
in interfaceIdleStrategy
-
reset
public void reset()
Reset the internal state in preparation for entering an idle state again.- Specified by:
reset
in interfaceIdleStrategy
-
alias
public java.lang.String alias()
Simple name by which the strategy can be identified.- Specified by:
alias
in interfaceIdleStrategy
- Returns:
- simple name by which the strategy can be identified.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-