当前位置: 首页 > article >正文

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的数组

children = new EventExecutor[nThreads];

NioEventLoopGroup的newChild创建具体的eventloop即NioEventLoop
SingleThreadEventExecutor在重写了线程池的execute方法时,其会创建线程,执行SingleThreadEventExecutor.this.run()抽象方法
同时会初始化EventExecutorChooser, 有两种类型

  • PowerOfTwoEventExecutorChooser
  • GenericEventExecutorChooser

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

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


http://www.kler.cn/news/303132.html

相关文章:

  • 统计信息的导出导入
  • 顶点照明渲染路径
  • Java异常处理机制详解
  • 如何把我另一个分支上的commit拿过来
  • C语言整型数据在内存中的存储(22)
  • python如何将DICOM图片转为JPG?
  • Docker torchserve 部署模型流程
  • MATLAB | R2024b更新了哪些好玩的东西?
  • 在Excel中通过Python运行公式和函数实现数据计算
  • 计算机网络27、28——Linux命令1、2
  • 这款神器,运维绝杀 !!! 【送源码】
  • 内部flash模拟成EepRom-重新梳理
  • codeup:将已有文件夹推送到已有仓库
  • 计算机毕业设计 | SpringBoot+vue 游戏商城 steam网站管理系统(附源码)
  • 【运维监控】Prometheus+grafana+kafka_exporter监控kafka运行情况
  • Leetcode 3282. Reach End of Array With Max Score
  • 波场TRON领航者孙宇晨:区块链行业的青年先锋与标杆
  • 代理导致的git错误
  • Grafana面板-linux主机详情(使用标签过滤主机监控)
  • 如何使用ssm实现基于VUE3+SSM框架的在线宠物商城+vue
  • 【Java】StringUtils 工具类常用的方法
  • 【JavaSE】--方法的使用
  • 【vuetify】v-select 无法正常显示,踩坑记录!
  • 京东鸿蒙上线前瞻——使用 Taro 打造高性能原生应用
  • .net core 通过Sqlsugar生成实体
  • 安全政策与安全意识(下)
  • 【2024】前端学习笔记3-外部链接-内部链接-锚点链接
  • 鱼类检测-目标检测数据集(包括VOC格式、YOLO格式)
  • mariadb主从配置步骤
  • 苹果CMS影视程序被举报侵权?有效解决方案指南