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

相关推荐
小马爱打代码2 分钟前
Java泛型:T、E、K、V、?
java
l***37094 分钟前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
小坏讲微服务7 分钟前
Spring Boot 4.0 与 Spring Cloud Alibaba 2025 整合完整指南
java·spring boot·分布式·后端·spring cloud·微服务·架构
毕设源码-邱学长8 分钟前
【开题答辩全过程】以 基于Spring Boot的酒店管理系统为例,包含答辩的问题和答案
java·spring boot·后端
瀚高PG实验室11 分钟前
HGDB兼容性之oracle的rowid
数据库·oracle·瀚高数据库
晨晖217 分钟前
MyBatisPlus的条件构造器
java·数据库·windows
有味道的男人21 分钟前
速卖通商品详情接口(速卖通API系列)
java·大数据·数据库
一只小透明啊啊啊啊21 分钟前
垃圾回收算法有哪些
java·jvm
DanB2424 分钟前
Java(网络编程)
java·网络·php
蟹至之24 分钟前
【MySQL】用户和权限管理
数据库·mysql·权限