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

相关推荐
28岁青春痘老男孩6 分钟前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧11 分钟前
限流的算法
java·开发语言
元Y亨H19 分钟前
Nacos - 服务注册
java·微服务
曲莫终40 分钟前
Java VarHandle全面详解:从入门到精通
java·开发语言
ruleslol40 分钟前
MySQL的段、区、页、行 详解
数据库·mysql
一心赚狗粮的宇叔1 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
while(1){yan}1 小时前
MyBatis Generator
数据库·spring boot·java-ee·mybatis
奋进的芋圆1 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
それども1 小时前
MySQL affectedRows 计算逻辑
数据库·mysql
是小章啊1 小时前
MySQL 之SQL 执行规则及索引详解
数据库·sql·mysql