Netty之EventLoop

简介: EventLoop本质是一个单线程执行器(同时维护了一个Selector),里面有run方法处理channel上源源不断的io事件。

1、什么是EventLoop

EventLoop本质是一个单线程执行器(同时维护了一个Selector),里面有run方法处理channel上源源不断的io事件。

2、什么是EventLoopGroup

EventLoopGroup是一组EventLoop,Channel一般会调用EventLoopgroup的register方法来绑定其中一个EventLoop,后续这个Channel上的io事件都由此EventLoop来处理(保证io事件处理时的线程安全)。

NioEventLoopGroupeventExecutors=newNioEventLoopGroup();

NioEventLoopGroup默认线程数为当前CPU核心数*2;如果有传参则以传参为准。

NioEventLoopGroup支持IO事件,普通任务事件,定时任务事件。

示例:

packagenetty.c2;
importio.netty.channel.nio.NioEventLoopGroup;
importjavafx.scene.layout.GridPane;
importjava.util.concurrent.TimeUnit;
publicclassTestEventLoop {
publicstaticvoidmain(String[] args) {
NioEventLoopGroupeventExecutors=newNioEventLoopGroup(2);
System.out.println(eventExecutors.next());
System.out.println(eventExecutors.next());
System.out.println(eventExecutors.next());
System.out.println(eventExecutors.next());
// 执行普通任务//        eventExecutors.next().submit(() -> {//            try {//                System.out.println("thread");//                Thread.sleep(1000);//            } catch (InterruptedException e) {//                e.printStackTrace();//            }//        });//        System.out.println("main");// 执行定时任务eventExecutors.next().scheduleAtFixedRate(() -> {
try {
System.out.println("thread");
Thread.sleep(1000);
            } catch (InterruptedExceptione) {
e.printStackTrace();
            }
        }, 0, 1, TimeUnit.SECONDS);
    }
}

3、EventLoop和Channel

eventLoop和channel进行了绑定。

image.png

考虑一个问题:

如果一个work可以绑定多个channel。那么如果某个channel上的handler执行过久,就直接影响work上其他线程的执行时间,怎么处理?

解法:创建一个独立的EventLoopGroup。channel.pipeline().addLast(新的group, "xxx", new ChannelInboundHandlerAdapter(){})。要注意handler的顺序。

image.png

image.png

剖析:如果两个handler绑定的是同一个线程,那么就直接调用;否则,把要调用的代码封装为一个任务对象,由下一个handler线程来调用(切换线程)。

相关文章
idea快速生成get set 构造方法的快捷键
idea快速生成get set 构造方法的快捷键
714 0
|
9月前
|
JSON API 开发者
天猫商品详情 API 接口:功能、调用与实战攻略
天猫商品详情API为电商从业者、开发者和数据分析人员提供高效的商品数据获取途径。通过商品ID,该接口可返回包括基本信息、价格、库存及图片等详细内容,具有高准确性、易集成和功能丰富的特点。示例代码展示了如何用Python调用此API,生成签名确保请求安全,助力用户优化定价策略、开发应用或分析市场趋势。
536 10
|
Web App开发 数据可视化
如何轮播 DataV 大屏
如何轮播 DataV 大屏 当你使用 DataV 制作了足够多的大屏时,一定会冒出一个需求:轮流播放大屏页面,不要怕,一分钟就可以搞定 安装 Chrome 插件 TabCarousel 首先安装神器插件 TabCarousel 使用 安装完成之后,地址栏右侧会出现这么个小图标 。
19607 154
如何轮播 DataV 大屏
|
设计模式
条件判断的模式问题之卫述(Guard Clause)和保镖模式(Bouncer Pattern)是什么关系
条件判断的模式问题之卫述(Guard Clause)和保镖模式(Bouncer Pattern)是什么关系
229 1
|
存储
深入解析AVL树:高效实现二叉平衡搜索树
深入解析AVL树:高效实现二叉平衡搜索树
261 1
|
消息中间件 算法 Java
金石推荐 |【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)
金石推荐 |【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)
306 1
|
算法
数学建模——曲线拟合
数学建模——曲线拟合
1444 1
|
存储 负载均衡 Dubbo
Zookeeper的常见面试题(全)
目录前言1. Zookeeper的了解2. ZAB协议 / 主从节点的同步了解3. 多少种部署方式4. 通知机制5. 集群节点的个数6. 节点的类型有什么7. 集群安装的特点8. 选举机制是如何的 前言 主要理顺zookeeper的相关知识点以及面试常被问及的知识点 基础知识可看我之前的文章 Zookeeper从入门到精通(全) 1. Zookeeper的了解 zookeeper主要是文件系统(存储数据)和通知机制(进行通知信息) 它是一个为分布式应用提供一致性服务的软件 具体都有哪些些功能 统一命名服务
540 1
Zookeeper的常见面试题(全)
Netty源码剖析之NIOEventLoopGroup创建流程
Netty中事件循环机制非常重要,通过NIOEventLoopGroup可以了解到netty如何实现处理请求,如何实现事件监听处理,转发,有助于平时学习使用
336 0
Netty源码剖析之NIOEventLoopGroup创建流程
|
存储 缓存
ZYNQ-Video out IP和Video Timing Controller IP简介
ZYNQ-Video out IP和Video Timing Controller IP简介
1706 0
ZYNQ-Video out IP和Video Timing Controller IP简介

热门文章

最新文章