Class SleepingIdleStrategy

java.lang.Object
org.agrona.concurrent.SleepingIdleStrategy
All Implemented Interfaces:
IdleStrategy

public final class SleepingIdleStrategy extends Object implements IdleStrategy
When idle this strategy is to sleep for a specified period in nanoseconds.

If the period is zero or negative, no sleeping is done.

This class uses LockSupport.parkNanos(long) to idle.

  • Field Details

    • ALIAS

      public static final String ALIAS
      Name to be returned from alias().
      See Also:
    • 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:
    • sleepPeriodNs

      private final long sleepPeriodNs
  • Constructor Details

    • SleepingIdleStrategy

      public SleepingIdleStrategy()
      Default constructor using DEFAULT_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.
    • SleepingIdleStrategy

      public SleepingIdleStrategy(long sleepPeriod, TimeUnit timeUnit)
      Constructed a new strategy that will sleep for a given period when idle.
      Parameters:
      sleepPeriod - the period for which the strategy will sleep when work count is 0.
      timeUnit - the timeunit of the sleepPeriod.
  • Method Details

    • 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 interface IdleStrategy
      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 with IdleStrategy.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 interface IdleStrategy
    • reset

      public void reset()
      Reset the internal state in preparation for entering an idle state again.
      Specified by:
      reset in interface IdleStrategy
    • alias

      public String alias()
      Simple name by which the strategy can be identified.
      Specified by:
      alias in interface IdleStrategy
      Returns:
      simple name by which the strategy can be identified.
    • toString

      public String toString()
      Overrides:
      toString in class Object