EpollIoHandler Class — netty Architecture
Architecture documentation for the EpollIoHandler class in EpollIoHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD e531fecb_b495_8b97_8d1b_49ff2b5ccdbb["EpollIoHandler"] d4f478e3_4aea_ff0a_1e7e_41b7850e2278["EpollIoHandler.java"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|defined in| d4f478e3_4aea_ff0a_1e7e_41b7850e2278 129bf5a8_f973_af96_d38d_d6f4c9e661df["IoHandlerFactory()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 129bf5a8_f973_af96_d38d_d6f4c9e661df 40c77ccb_a5b7_aed0_8603_28bc38d7dc1d["EpollIoHandler()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 40c77ccb_a5b7_aed0_8603_28bc38d7dc1d d8d3c2a7_f51b_49e6_1baf_d44b8354406c["EpollIoHandle()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| d8d3c2a7_f51b_49e6_1baf_d44b8354406c 120cbd66_613e_f44e_c089_5cdea71305fa["EpollIoOps()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 120cbd66_613e_f44e_c089_5cdea71305fa 971d9f3b_e81e_dc5f_753e_454755fc5aec["openFileDescriptors()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 971d9f3b_e81e_dc5f_753e_454755fc5aec cf0e10de_7ce5_c698_1c75_d701a03a88b4["closeFileDescriptor()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| cf0e10de_7ce5_c698_1c75_d701a03a88b4 4e253f99_0b70_4990_9891_90c4147a53a9["wakeup()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 4e253f99_0b70_4990_9891_90c4147a53a9 2945722a_0956_8b5c_9537_41d244da461b["prepareToDestroy()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 2945722a_0956_8b5c_9537_41d244da461b 7323df9d_1a41_df1a_e926_ae591195533e["destroy()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 7323df9d_1a41_df1a_e926_ae591195533e b76e719f_e7f5_86e3_46e6_fb56c280ea70["IoRegistration()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| b76e719f_e7f5_86e3_46e6_fb56c280ea70 9c27f373_141e_1407_afc9_28c8ec5476de["isCompatible()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 9c27f373_141e_1407_afc9_28c8ec5476de 37e56614_1fbd_9e4f_ced7_863897ee3e54["numRegisteredChannels()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| 37e56614_1fbd_9e4f_ced7_863897ee3e54 c3134656_25c7_4977_bd10_7885be81e8e1["registeredChannelsList()"] e531fecb_b495_8b97_8d1b_49ff2b5ccdbb -->|method| c3134656_25c7_4977_bd10_7885be81e8e1
Relationship Graph
Source Code
transport-classes-epoll/src/main/java/io/netty/channel/epoll/EpollIoHandler.java lines 54–575
public class EpollIoHandler implements IoHandler {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(EpollIoHandler.class);
private static final long EPOLL_WAIT_MILLIS_THRESHOLD =
SystemPropertyUtil.getLong("io.netty.channel.epoll.epollWaitThreshold", 10);
{
Epoll.ensureAvailability();
}
// Pick a number that no task could have previously used.
private long prevDeadlineNanos = NONE;
private FileDescriptor epollFd;
private FileDescriptor eventFd;
private FileDescriptor timerFd;
private final IntObjectMap<DefaultEpollIoRegistration> registrations = new IntObjectHashMap<>(4096);
private final boolean allowGrowing;
private final EpollEventArray events;
private final NativeArrays nativeArrays;
private final SelectStrategy selectStrategy;
private final IntSupplier selectNowSupplier = new IntSupplier() {
@Override
public int get() throws Exception {
return epollWaitNow();
}
};
private final ThreadAwareExecutor executor;
private static final long AWAKE = -1L;
private static final long NONE = Long.MAX_VALUE;
// nextWakeupNanos is:
// AWAKE when EL is awake
// NONE when EL is waiting with no wakeup scheduled
// other value T when EL is waiting with wakeup scheduled at time T
private final AtomicLong nextWakeupNanos = new AtomicLong(AWAKE);
private boolean pendingWakeup;
private int numChannels;
// See https://man7.org/linux/man-pages/man2/timerfd_create.2.html.
private static final long MAX_SCHEDULED_TIMERFD_NS = 999999999;
/**
* Returns a new {@link IoHandlerFactory} that creates {@link EpollIoHandler} instances.
*/
public static IoHandlerFactory newFactory() {
return newFactory(0, DefaultSelectStrategyFactory.INSTANCE);
}
/**
* Returns a new {@link IoHandlerFactory} that creates {@link EpollIoHandler} instances.
*/
public static IoHandlerFactory newFactory(final int maxEvents,
final SelectStrategyFactory selectStrategyFactory) {
Epoll.ensureAvailability();
ObjectUtil.checkPositiveOrZero(maxEvents, "maxEvents");
ObjectUtil.checkNotNull(selectStrategyFactory, "selectStrategyFactory");
return new IoHandlerFactory() {
@Override
public IoHandler newHandler(ThreadAwareExecutor executor) {
return new EpollIoHandler(executor, maxEvents, selectStrategyFactory.newSelectStrategy());
}
@Override
public boolean isChangingThreadSupported() {
return true;
}
};
}
// Package-private for testing
EpollIoHandler(ThreadAwareExecutor executor, int maxEvents, SelectStrategy strategy) {
this.executor = ObjectUtil.checkNotNull(executor, "executor");
selectStrategy = ObjectUtil.checkNotNull(strategy, "strategy");
if (maxEvents == 0) {
allowGrowing = true;
events = new EpollEventArray(4096);
} else {
allowGrowing = false;
events = new EpollEventArray(maxEvents);
Source
Frequently Asked Questions
What is the EpollIoHandler class?
EpollIoHandler is a class in the netty codebase, defined in transport-classes-epoll/src/main/java/io/netty/channel/epoll/EpollIoHandler.java.
Where is EpollIoHandler defined?
EpollIoHandler is defined in transport-classes-epoll/src/main/java/io/netty/channel/epoll/EpollIoHandler.java at line 54.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free