netty之NioEventLoop和NioEventLoopGroup

类结构图

NioEventLoopGroup

MultithreadEventLoopGroup NioEventLoopGroup MultithreadEventExecutorGroup AbstractEventExecutorGroup <<interface>> EventExecutorGroup <<interface>> EventLoopGroup

NioEventLoop

<<interface>> EventExecutor AbstractEventExecutor AbstractScheduledEventExecutor SingleThreadEventExecutor SingleThreadEventLoop NioEventLoop <<interface>> EventLoop

初始化

线程池创建是通过MultithreadEventExecutorGroup构造函数,创建线程是通过DefaultThreadFactory

首先创建EventExecutor的数组

cpp 复制代码
children = new EventExecutor[nThreads];

NioEventLoopGroup的newChild创建具体的eventloop即NioEventLoop

SingleThreadEventExecutor在重写了线程池的execute方法时,其会创建线程,执行SingleThreadEventExecutor.this.run()抽象方法

同时会初始化EventExecutorChooser, 有两种类型

  • PowerOfTwoEventExecutorChooser
  • GenericEventExecutorChooser

初始化SelectorProvider,默认使用sun.nio.ch.DefaultSelectorProvider.create()

java 复制代码
public static SelectorProvider provider() {
        synchronized (lock) {
            if (provider != null)
                return provider;
            return AccessController.doPrivileged(
                new PrivilegedAction<SelectorProvider>() {
                    public SelectorProvider run() {
                            if (loadProviderFromProperty())
                                return provider;
                            if (loadProviderAsService())
                                return provider;
                            provider = sun.nio.ch.DefaultSelectorProvider.create();
                            return provider;
                        }
                    });
        }
    }

初始化DefaultSelectStrategy,默认使用SelectStrategy.SELECT

创建NioEventLoop传递的executor参数为ThreadPerTaskExecutor

相关推荐
坐吃山猪5 分钟前
JDK 8 到 JDK 21 新特性知识要点
java·开发语言·windows
坐吃山猪8 分钟前
【多线程】FutureTask多线程底层实现
java·开发语言·数据库
weixin1997010801611 分钟前
[特殊字符]《从0到1:闲鱼开放平台授权登录 + AccessToken 刷新 + 聚石塔部署完整链路》(附Python源码)
java·数据库·python
Freak嵌入式29 分钟前
RP2040 PIO 编程模型与状态机原理:从硬件架构到工作逻辑全解析
java·大数据·开发语言·单片机·嵌入式硬件·硬件架构
cmes_love34 分钟前
国内期货Level2五档行情与逐笔成交数据介绍
数据库·区块链
kakawzw35 分钟前
Netty源码笔记
java·服务器·后端
zhuodedao39 分钟前
Spring AI + MCP 文件工具未调用问题复盘:为什么初始化成功却没有写入文件?
java·debug·agent·springai·mcp
cmes_love43 分钟前
CME和CBOT外盘期货数据下载资源介绍
数据库·区块链
Zenova EdgeOS1 小时前
工业边缘双写一致性:从缓存到多 DB 的工程实战
数据库·缓存·边缘计算·工业边缘
Java小白笔记1 小时前
Java中大数据实时归集与指标汇总方案
java·大数据·开发语言