【Netty 网络通信】EventLoop 事件循环对象 解析

简介: 【1月更文挑战第9天】【Netty 网络通信】EventLoop 事件循环对象 解析

EventLoop 事件循环对象:

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

EventLoop的继承关系比较复杂:

  • 一条线是继承自j.u.c.ScheduledExecutorsenvice因此包合了线程池中所有的方法。
  • 另一条线是继承自Netty自己的OrderedEventExecutor(有序的事件处理器),提供了booleaninEventLoop(Threadthread)方法判断一个线程是否属于此EventLoop;提供了parent()方法来着看自己属于哪个EventLoopGroup

EventloopGroup 事件循环组:

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

EventloopGroup继承自netty自己的EventExecutorGroup实现了Iterable接口提供遍历EventLoop的能力;另有next()方法获取集合中下一个EventLoop

注意:一般情况下我们并不会直接使用EventLoop而是使用EventloopGroup事件循环组。

  • NioEventLoopGroup:可以执行处理IO事件,普通任务,定时任务。
new NioEventLoopGroup(指定线程数量)

默认的线程数是指定为0,然后比较1当前系统核心数*2之间大小,取较大值。如果指定了线程数量那就按照指定的数创建线程。

NettyRuntime.setAvailableProcessors(指定处理器数量);
NettyRuntime.availableProcessors()

如果不进行设置,默认是CPU的处理器数量。处理器数量在默认情况下会动态调整NioEventLoopGroup创建的线程数量,线程数量对应着EventLoop对象,一个线程对应一个EventLoop对象。

调用NioEventLoopGroupnext()方法,可以循环的获取分组分组中的EventLoop对象。

NettyRuntime.availableProcessors()

如果不进行设置,默认是CPU的处理器数量。处理器数量在默认情况下会动态调整NioEventLoopGroup创建的线程数量,线程数量对应着EventLoop对象,一个线程对应一个EventLoop对象。

调用NioEventLoopGroupnext()方法,可以循环的获取分组分组中的EventLoop对象。

// 设置Netty系统的处理器数量:
NettyRuntime.setAvailableProcessors(1);
// 查看当前Netty处理器数量:
System.out.println(NettyRuntime.availableProcessors());
// 创建NioEventLoopGroup对象:
NioEventLoopGroup group = new NioEventLoopGroup();
// 使用next获取group中的EventLoop对象:
for (int i = 0; i < 4; i++) {
    System.out.println(group.next());

  • DefaultEventLoopGroup:可以执行处理普通任务,定时任务。
new DefaultEventLoopGroup(指定线程数量)
相关文章
|
1月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
240 1
|
1月前
|
缓存 网络协议 Linux
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
【Shell 命令集合 网络通讯 】Linux 配置DNS dnsconf 命令 使用教程
39 0
|
15小时前
|
监控 负载均衡 网络协议
|
21小时前
|
网络协议 物联网 网络安全
|
1天前
|
监控 安全 网络虚拟化
|
1天前
|
监控 安全 网络性能优化
|
11天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
15天前
|
SQL Java 数据库连接
深度解析MyBatis核心:探寻其核心对象的精妙设计
深度解析MyBatis核心:探寻其核心对象的精妙设计
22 1
深度解析MyBatis核心:探寻其核心对象的精妙设计
|
15天前
|
Java 关系型数据库 MySQL
高级对象装配:解析Spring创建复杂对象的秘诀
高级对象装配:解析Spring创建复杂对象的秘诀
27 0
高级对象装配:解析Spring创建复杂对象的秘诀

推荐镜像

更多