【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(指定线程数量)
相关文章
|
4月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
265 57
|
2月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
213 0
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
6月前
|
弹性计算 网络协议 Java
Netty基础—2.网络编程基础二
本文介绍了网络编程的基本概念和三种主要模式:BIO(阻塞IO)、AIO(异步IO)和NIO(非阻塞IO)。BIO模型通过为每个客户端连接创建一个线程来处理请求,适合客户端较少的情况,但在高并发下性能较差。AIO模型通过异步IO操作,允许操作系统处理IO,适合高并发场景,但编码复杂且Linux支持有限。NIO模型通过Selector实现多路复用,适合高并发且性能要求高的场景。文章还详细介绍了NIO中的Buffer、Selector、Channel等核心组件,并提供了NIO的实战开发流程和代码示例。
|
6月前
|
监控 网络协议 Java
Netty基础—1.网络编程基础一
本文详细介绍了网络通信的基础知识,涵盖OSI七层模型、TCP/IP协议族及其实现细节。首先解释了OSI模型各层功能,如物理层负责数据通路建立与传输,数据链路层提供无差错传输等。接着探讨了TCP/IP协议,包括TCP和UDP的特点、三次握手与四次挥手过程,以及如何通过确认应答和序列号确保数据可靠性。还分析了HTTP请求的传输流程和报文结构,并讨论了短连接与长连接概念。 此外,解析了Linux下的IO模型,包括阻塞IO、非阻塞IO、IO复用(select/poll/epoll)、信号驱动IO和异步IO的特点与区别,强调了epoll在高并发场景下的优势及其水平触发和边缘触发两种工作模式。
|
域名解析 存储 网络协议
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
本文详细介绍了IP协议报头结构及其各字段的功能,包括版本、首部长度、服务类型、总长度、标识、片偏移、标志、生存时间(TTL)、协议、首部检验和等内容。此外,还探讨了IP地址的网段划分、特殊IP地址的应用场景,以及路由选择的大致流程。最后,文章简要介绍了DNS协议的作用及其发展历史,解释了域名解析系统的工作原理。
494 5
深入解析网络通信关键要素:IP 协议、DNS 及相关技术
|
编解码 分布式计算 网络协议
Netty高性能网络框架(一)
Netty高性能网络框架(一)
|
6月前
|
网络协议 算法 Java
Netty基础—3.基础网络协议
本文详细梳理了计算机网络的基础知识,涵盖从物理层到应用层的各层协议及其功能。内容包括七层模型与四层模型对比、IP地址与子网划分、TCP三次握手及四次挥手过程、Socket编程原理、HTTP/HTTPS协议的工作机制等。同时深入探讨了Linux IO模型(阻塞、非阻塞、IO多路复用)及其应用场景,并分析了select、poll、epoll的区别。此外,还涉及Java IO读写的底层流程及同步异步、阻塞非阻塞的概念。这些知识点为理解网络通信和高性能服务器开发提供了全面的理论支持。
|
9月前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
9月前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。

热门文章

最新文章

推荐镜像

更多
  • DNS