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

相关推荐
猫猫不是喵喵.3 分钟前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
瑞雪兆丰年兮14 分钟前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop
曲径海盗23 分钟前
Try-Except怎么用,3个追问解答在自动化下的应用
java·jvm·oracle
lsc_blog1 小时前
听到优化风声,先准备能由自己掌控的事
数据库·分布式·中间件·职场和发展·重构
Cosolar1 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github
墨痕诉清风1 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
nice_lcj5202 小时前
【从零理解 Spring AI · 16】Agent 与工作流:什么该写死,什么该让模型决定
java·人工智能·后端·spring ai·ai应用开发
北京云帆互联科技2 小时前
云帆培训考试系统更新说明:v9.3.0
java·学习
学长毕设3 小时前
基于SpringBoot的景点管理系统-附源码
java·spring boot·后端
sxlishaobin4 小时前
Maven Setting详解
java·学习·maven