Package io.netty.channel.nio
Class NioEventLoop
- All Implemented Interfaces:
EventLoop,EventLoopGroup,EventExecutor,EventExecutorGroup,OrderedEventExecutor,AutoCloseable,Iterable<EventExecutor>,Executor,ExecutorService,ScheduledExecutorService
SingleThreadEventLoop implementation which register the Channel's to a
Selector and so does the multi-plexing of these in the event loop.-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class io.netty.channel.SingleThreadEventLoop
SingleThreadEventLoop.ChannelsReadOnlyIterator<T extends Channel>Nested classes/interfaces inherited from class io.netty.util.concurrent.SingleThreadEventExecutor
SingleThreadEventExecutor.NonWakeupRunnableNested classes/interfaces inherited from class io.netty.util.concurrent.AbstractEventExecutor
AbstractEventExecutor.LazyRunnable -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final longprivate intprivate static final intprivate static final booleanprivate intprivate static final InternalLoggerprivate static final intprivate booleanprivate final AtomicLongprivate static final longprivate final SelectorProviderprivate SelectedSelectionKeySetprivate final IntSupplierprivate SelectorThe NIOSelector.private static final intprivate final SelectStrategyprivate SelectorFields inherited from class io.netty.channel.SingleThreadEventLoop
DEFAULT_MAX_PENDING_TASKS -
Constructor Summary
ConstructorsConstructorDescriptionNioEventLoop(NioEventLoopGroup parent, Executor executor, SelectorProvider selectorProvider, SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory, EventLoopTaskQueueFactory tailTaskQueueFactory) -
Method Summary
Modifier and TypeMethodDescriptionprotected booleanafterScheduledTaskSubmitted(long deadlineNanos) protected booleanbeforeScheduledTaskSubmitted(long deadlineNanos) Called from arbitrary non-EventExecutorthreads prior to scheduled task submission.(package private) voidcancel(SelectionKey key) protected voidcleanup()Do nothing, sub-classes may overrideprivate voidcloseAll()intReturns the percentage of the desired amount of time spent for I/O in the event loop.private static voidprivate static voidinvokeChannelUnregistered(NioTask<SelectableChannel> task, SelectionKey k, Throwable cause) newTaskQueue(int maxPendingTasks) Create a newQueuewhich will holds the tasks to execute.newTaskQueue(EventLoopTaskQueueFactory queueFactory) newTaskQueue0(int maxPendingTasks) private NioEventLoop.SelectorTupleprivate voidprivate static voidprivate voidprivate voidprivate voidprocessSelectedKeysPlain(Set<SelectionKey> selectedKeys) voidprivate voidvoidregister(SelectableChannel ch, int interestOps, NioTask<?> task) Registers an arbitrarySelectableChannel, not necessarily created by Netty, to theSelectorof this event loop.private voidregister0(SelectableChannel ch, int interestOps, NioTask<?> task) intprotected voidrun()Run the tasks in theSingleThreadEventExecutor.taskQueueprivate intselect(long deadlineNanos) private void(package private) intprivate booleanselectReturnPrematurely(int selectCnt, boolean ranTasks, int strategy) voidsetIoRatio(int ioRatio) Sets the percentage of the desired amount of time spent for I/O in the event loop.private booleanunexpectedSelectorWakeup(int selectCnt) (package private) Selectorprotected voidwakeup(boolean inEventLoop) Methods inherited from class io.netty.channel.SingleThreadEventLoop
afterRunningAllTasks, executeAfterEventLoopIteration, hasTasks, next, parent, pendingTasks, register, register, registerMethods inherited from class io.netty.util.concurrent.SingleThreadEventExecutor
addShutdownHook, addTask, awaitTermination, confirmShutdown, deadlineNanos, delayNanos, execute, inEventLoop, interruptThread, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isShuttingDown, isTerminated, lazyExecute, newTaskQueue, peekTask, pollTask, pollTaskFrom, reject, reject, removeShutdownHook, removeTask, runAllTasks, runAllTasks, runAllTasksFrom, runScheduledAndExecutorTasks, shutdown, shutdownGracefully, takeTask, terminationFuture, threadProperties, updateLastExecutionTime, wakesUpForTaskMethods inherited from class io.netty.util.concurrent.AbstractScheduledEventExecutor
cancelScheduledTasks, deadlineToDelayNanos, getCurrentTimeNanos, hasScheduledTasks, initialNanoTime, nanoTime, nextScheduledTaskDeadlineNanos, nextScheduledTaskNano, pollScheduledTask, pollScheduledTask, schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay, validateScheduledMethods inherited from class io.netty.util.concurrent.AbstractEventExecutor
inEventLoop, iterator, newFailedFuture, newProgressivePromise, newPromise, newSucceededFuture, newTaskFor, newTaskFor, runTask, safeExecute, shutdownGracefully, shutdownNow, submit, submit, submitMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.netty.util.concurrent.EventExecutor
inEventLoop, inEventLoop, newFailedFuture, newProgressivePromise, newPromise, newSucceededFutureMethods inherited from interface io.netty.util.concurrent.EventExecutorGroup
isShuttingDown, iterator, schedule, schedule, scheduleAtFixedRate, scheduleWithFixedDelay, shutdown, shutdownGracefully, shutdownGracefully, shutdownNow, submit, submit, submit, terminationFutureMethods inherited from interface java.util.concurrent.ExecutorService
awaitTermination, close, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminatedMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
logger
-
CLEANUP_INTERVAL
private static final int CLEANUP_INTERVAL- See Also:
-
DISABLE_KEY_SET_OPTIMIZATION
private static final boolean DISABLE_KEY_SET_OPTIMIZATION -
MIN_PREMATURE_SELECTOR_RETURNS
private static final int MIN_PREMATURE_SELECTOR_RETURNS- See Also:
-
SELECTOR_AUTO_REBUILD_THRESHOLD
private static final int SELECTOR_AUTO_REBUILD_THRESHOLD -
selectNowSupplier
-
selector
The NIOSelector. -
unwrappedSelector
-
selectedKeys
-
provider
-
AWAKE
private static final long AWAKE- See Also:
-
NONE
private static final long NONE- See Also:
-
nextWakeupNanos
-
selectStrategy
-
ioRatio
private volatile int ioRatio -
cancelledKeys
private int cancelledKeys -
needsToSelectAgain
private boolean needsToSelectAgain
-
-
Constructor Details
-
NioEventLoop
NioEventLoop(NioEventLoopGroup parent, Executor executor, SelectorProvider selectorProvider, SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler, EventLoopTaskQueueFactory taskQueueFactory, EventLoopTaskQueueFactory tailTaskQueueFactory)
-
-
Method Details
-
newTaskQueue
-
openSelector
-
selectorProvider
-
newTaskQueue
Description copied from class:SingleThreadEventExecutorCreate a newQueuewhich will holds the tasks to execute. This default implementation will return aLinkedBlockingQueuebut if your sub-class ofSingleThreadEventExecutorwill not do any blocking calls on the thisQueueit may make sense to@Overridethis and return some more performant implementation that does not support blocking operations at all.- Overrides:
newTaskQueuein classSingleThreadEventExecutor
-
newTaskQueue0
-
register
Registers an arbitrarySelectableChannel, not necessarily created by Netty, to theSelectorof this event loop. Once the specifiedSelectableChannelis registered, the specifiedtaskwill be executed by this event loop when theSelectableChannelis ready. -
register0
-
getIoRatio
public int getIoRatio()Returns the percentage of the desired amount of time spent for I/O in the event loop. -
setIoRatio
public void setIoRatio(int ioRatio) Sets the percentage of the desired amount of time spent for I/O in the event loop. Value range from 1-100. The default value is50, which means the event loop will try to spend the same amount of time for I/O as for non-I/O tasks. The lower the number the more time can be spent on non-I/O tasks. If value set to100, this feature will be disabled and event loop will not attempt to balance I/O and non-I/O tasks. -
rebuildSelector
public void rebuildSelector() -
registeredChannels
public int registeredChannels()Description copied from class:SingleThreadEventLoopReturns the number ofChannels registered with thisEventLoopor-1if operation is not supported. The returned value is not guaranteed to be exact accurate and should be viewed as a best effort.- Overrides:
registeredChannelsin classSingleThreadEventLoop
-
registeredChannelsIterator
- Overrides:
registeredChannelsIteratorin classSingleThreadEventLoop- Returns:
- read-only iterator of active
Channels registered with thisEventLoop. The returned value is not guaranteed to be exact accurate and should be viewed as a best effort. This method is expected to be called from within event loop.
-
rebuildSelector0
private void rebuildSelector0() -
run
protected void run()Description copied from class:SingleThreadEventExecutorRun the tasks in theSingleThreadEventExecutor.taskQueue- Specified by:
runin classSingleThreadEventExecutor
-
selectReturnPrematurely
private boolean selectReturnPrematurely(int selectCnt, boolean ranTasks, int strategy) -
unexpectedSelectorWakeup
private boolean unexpectedSelectorWakeup(int selectCnt) -
handleLoopException
-
processSelectedKeys
private void processSelectedKeys() -
cleanup
protected void cleanup()Description copied from class:SingleThreadEventExecutorDo nothing, sub-classes may override- Overrides:
cleanupin classSingleThreadEventExecutor
-
cancel
-
processSelectedKeysPlain
-
processSelectedKeysOptimized
private void processSelectedKeysOptimized() -
processSelectedKey
-
processSelectedKey
-
closeAll
private void closeAll() -
invokeChannelUnregistered
private static void invokeChannelUnregistered(NioTask<SelectableChannel> task, SelectionKey k, Throwable cause) -
wakeup
protected void wakeup(boolean inEventLoop) - Overrides:
wakeupin classSingleThreadEventExecutor
-
beforeScheduledTaskSubmitted
protected boolean beforeScheduledTaskSubmitted(long deadlineNanos) Description copied from class:AbstractScheduledEventExecutorCalled from arbitrary non-EventExecutorthreads prior to scheduled task submission. Returnstrueif theEventExecutorthread should be woken immediately to process the scheduled task (if not already awake).If
falseis returned,AbstractScheduledEventExecutor.afterScheduledTaskSubmitted(long)will be called with the same value after the scheduled task is enqueued, providing another opportunity to wake theEventExecutorthread if required.- Overrides:
beforeScheduledTaskSubmittedin classAbstractScheduledEventExecutor- Parameters:
deadlineNanos- deadline of the to-be-scheduled task relative toAbstractScheduledEventExecutor.getCurrentTimeNanos()- Returns:
trueif theEventExecutorthread should be woken,falseotherwise
-
afterScheduledTaskSubmitted
protected boolean afterScheduledTaskSubmitted(long deadlineNanos) Description copied from class:AbstractScheduledEventExecutorSeeAbstractScheduledEventExecutor.beforeScheduledTaskSubmitted(long). Called only after that method returns false.- Overrides:
afterScheduledTaskSubmittedin classAbstractScheduledEventExecutor- Parameters:
deadlineNanos- relative toAbstractScheduledEventExecutor.getCurrentTimeNanos()- Returns:
trueif theEventExecutorthread should be woken,falseotherwise
-
unwrappedSelector
Selector unwrappedSelector() -
selectNow
- Throws:
IOException
-
select
- Throws:
IOException
-
selectAgain
private void selectAgain()
-