Netty NIO 底层实现
Netty 实现了 Reactor 模型,核心是 Selector;
Netty 的 Selector 底层是基于 JDK 的 Selector 实现的,依赖于 操作系统的 NIO实现;
1 | public static SelectorProvider provider() { |
JDK DefaultSelectorProvider.create()
下载 openjdk-8 的源码
搜索 SelectorProvider 即可发现,不同的操作系统 有不同的 DefaultSelectorProvider 实现:
在mac下
DefaultSelectorProvider 定义 封装:
1 | public class DefaultSelectorProvider { |
KQueueSelectorProvider 定义 kqueue 实现;
KQueueSelectorImpl 定义 kqueue 的实现逻辑;
KQueueArrayWrapper 真正通过 jni 调用 操作系统实现 kqueue;
在window下
可以看到NIO只有 poll
在 solaris 下
1 | public class DefaultSelectorProvider { |
可以看到如果 操作系统是 SunOS 下,则调用 DevPollSelectorProvider,否则调用 EPollSelectorProvider, 如果不能确定,默认调用 PollSelectorProvider;
可以看到 EPoll 的实现也是 jni 调用系统实现