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

相关推荐
吃口巧乐兹4 分钟前
理解 Agent 中的 Slash Command:从概念到自定义命令实践
java·github
小小龙学IT14 分钟前
Drizzle ORM:TypeScript 生态中冉冉升起的数据库工具链引言
javascript·数据库·typescript
夕除1 小时前
shizhan--10
java·开发语言
ECT-OS-JiuHuaShan2 小时前
什么是对和错?——“有针对性定义域的逻辑值的真伪”:认识论终极追问的公理化裁决
数据库·人工智能·算法·机器学习·数学建模
乐维_lwops2 小时前
多类型数据库如何高效监控?
数据库·数据库监控·运维监控
吴声子夜歌2 小时前
JVM——并发容器实现原理
java·jvm·并发容器
xier_ran2 小时前
【infra之路】PagedAttention
java·开发语言
齐潇宇2 小时前
Redis数据库基础
linux·数据库·redis·缓存
糖果店的幽灵2 小时前
Spring AI 从入门到精通-结构化输出
java·人工智能·spring
zzz_23682 小时前
【Spring】面试突击系列(六):Spring 工程实践与面试综合
java·spring·面试