Class SimpleDynamicNIOStrategy

  • All Implemented Interfaces:
    IOStrategy, WorkerThreadPoolConfigProducer

    public final class SimpleDynamicNIOStrategy
    extends java.lang.Object
    implements IOStrategy
    Simple dynamic strategy, which switches I/O processing strategies, basing on statistics. This implementation takes in consideration number of SelectionKeys, which were selected last time by Selector. SimpleDynamicIOStrategy is able to use 2 strategies underneath: SameThreadIOStrategy, WorkerThreadIOStrategy. And is able to switch between them basing on corresponding threshold (threshold represents the number of selected SelectionKeys). So the strategy is getting applied following way: SameThreadIOStrategy --(worker-thread threshold)--> WorkerThreadIOStrategy.
    Author:
    Alexey Stashok
    • Method Detail

      • executeIoEvent

        public boolean executeIoEvent​(Connection connection,
                                      IOEvent ioEvent)
                               throws java.io.IOException
        Description copied from interface: IOStrategy
        The SelectorRunner will invoke this method to allow the strategy implementation to decide how the IOEvent will be handled.
        Specified by:
        executeIoEvent in interface IOStrategy
        Parameters:
        connection - the Connection upon which the provided IOEvent occurred.
        ioEvent - the IOEvent that triggered execution of this strategy
        Returns:
        true, if this thread should keep processing IOEvents on the current and other Connections, or false if this thread should hand-off the farther IOEvent processing on any Connections, which means IOStrategy is becoming responsible for continuing IOEvent processing (possibly starting new thread, which will handle IOEvents).
        Throws:
        java.io.IOException - if an error occurs processing the IOEvent.
      • getThreadPoolFor

        public java.util.concurrent.Executor getThreadPoolFor​(Connection connection,
                                                              IOEvent ioEvent)
        Description copied from interface: IOStrategy
        Returns an Executor to be used to run given ioEvent processing for the given connection. A null value will be returned if the ioEvent should be executed in the kernel thread.
        Specified by:
        getThreadPoolFor in interface IOStrategy
        Parameters:
        connection - Connection
        ioEvent - the event to get the Executor for
        Returns:
        an Executor to be used to run given ioEvent processing for the given connection
      • executeIoEvent

        public boolean executeIoEvent​(Connection connection,
                                      IOEvent ioEvent,
                                      boolean isIoEventEnabled)
                               throws java.io.IOException
        Description copied from interface: IOStrategy
        The SelectorRunner will invoke this method to allow the strategy implementation to decide how the IOEvent will be handled.
        Specified by:
        executeIoEvent in interface IOStrategy
        Parameters:
        connection - the Connection upon which the provided IOEvent occurred.
        ioEvent - the IOEvent that triggered execution of this strategy
        isIoEventEnabled - true if IOEvent is still enabled on the Connection, or false if IOEvent was preliminary disabled or IOEvent is being simulated.
        Returns:
        true, if this thread should keep processing IOEvents on the current and other Connections, or false if this thread should hand-off the farther IOEvent processing on any Connections, which means IOStrategy is becoming responsible for continuing IOEvent processing (possibly starting new thread, which will handle IOEvents).
        Throws:
        java.io.IOException - if an error occurs processing the IOEvent.