13.Netty组件EventLoopGroup和EventLoop介绍

news2024/11/18 3:24:58

EventLoop 

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

1.继承java.util.concurrent.ScheduledExecutorService因此包含了线程池中所有的方法。

2.继承netty自己的OrderedEventExecutor

 EventLoopGroup

一般不会直接使用EventLoop,而是使用EventLoopGroup。

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

NioEventLoopGroup 与 DefaultEventLoopGroup的区别

EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup();// 处理io事件、定时任务、普通任务
DefaultEventLoopGroup defaultEventLoopGroup = new DefaultEventLoopGroup(); // 定时任务、普通任务

new NioEventLoopGroup() 跟踪源码:

可以看出默认创建的线程数= 电脑cpu核数 x 2 

@Slf4j
public class EventLoopGroupDemo {

    public static void main(String[] args) {
        //创建EventLoopGroup对象,指定线程数量为2
        EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup(2);// 处理io事件、定时任务、普通任务
//        DefaultEventLoopGroup defaultEventLoopGroup = new DefaultEventLoopGroup(); // 定时任务、普通任务
        //获取下一个eventLoop对象
        EventLoop eventLoop1 = nioEventLoopGroup.next();
        EventLoop eventLoop2 = nioEventLoopGroup.next();
        EventLoop eventLoop3 = nioEventLoopGroup.next();
        EventLoop eventLoop4 = nioEventLoopGroup.next();
        //只有两个对象,就会循环获取,获取四次,两两相同,看对象的hashcode值
        log.info("eventLoop1={}", eventLoop1); //io.netty.channel.nio.NioEventLoop@4ec6a292
        log.info("eventLoop2={}", eventLoop2); //io.netty.channel.nio.NioEventLoop@1b40d5f0
        log.info("eventLoop3={}", eventLoop3); //io.netty.channel.nio.NioEventLoop@4ec6a292
        log.info("eventLoop4={}", eventLoop4); //io.netty.channel.nio.NioEventLoop@1b40d5f0

        //把一个普通任务提交给EventLoopGroup中某一个EventLoop去执行,异步执行
        //应用场景:
        // 1.如果当前线程的某个任务比较耗时,可以交给EventLoopGroup中的其他线程进行异步处理。
        // 2.任务从一个线程的执行权转到另一个线程。
        nioEventLoopGroup.execute(() ->{
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //[nioEventLoopGroup-2-1] INFO com.xkj.org.netty.EventLoopGroupDemo - execute common task ok
            //nioEventLoopGroup-2-1 就是 EventLoopGroup中一个EventGroup线程的名字
            log.info("execute common task ok");
        });

        //执行定时任务
        //1s后执行,间隔2s执行一次
        nioEventLoopGroup.scheduleAtFixedRate(() -> {
            // [nioEventLoopGroup-2-2] INFO com.xkj.org.netty.EventLoopGroupDemo - ok
            // nioEventLoopGroup-2-2就是 EventLoopGroup中一个EventGroup线程的名字
            log.info("ok"); 
        }, 1, 2, TimeUnit.SECONDS);
        
        log.info("main");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1665035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MVC:一种设计模式而非软件架构

在软件开发领域,MVC(Model-View-Controller)经常被提及,但很多人对其定位存在误解。本文将澄清一个常见的误区:MVC是一种设计模式,而非软件架构。 一、MVC简介 MVC,即模型(Model&a…

CCF CSP 认证考试历年真题满分题解(所有前四题)

CCF CSP 认证考试历年真题满分题解(所有前四题) 前言 原本刷题的动机仅仅是为研究生复试的机试环节做准备,我通过刷csp的真题来锻炼自己,因为上次的机试题目全部是csp真题,最后也是顺利上岸。空闲之际,我…

uni-segmented-control插件使用

dcloud插件市场 前端/uniapp 1.HBuildX打开目标项目 2.进入dcloud插件市场下载目标插件 3.看到如下提示(已经可以在目标项目中使用插件啦) 4.项目正式使用

创新指南 | 生成式AI如何引领企业创新未来?

2023年麦肯锡全球数字战略调查了1000多名受访者,发现:建立创新文化的组织与它们应用包括生成式AI在内的最新数字技术提高产出的能力之间有着惊人的强关联。 本文探讨了顶尖创新企业采取的五项行动,使它们与同行之间拉开距离,并在使…

HTTP超时时间设置

在进行超时时间设置之前我们需要了解一次http请求经历的过程 浏览器进行DNS域名解析,得到对应的IP地址根据这个IP,找到对应的服务器建立连接(三次握手)建立TCP连接后发起HTTP请求(一个完整的http请求报文)服…

【QVariant类型剖析】

QVariant类型剖析 🌟 官方文档中给出的定义🌟 特性🌸QVariant实战应用🌸项目成果展示 🌟 官方文档中给出的定义 📘Because C forbids unions from including types that have non-default constructors or…

【C++算法】队列相关经典算法题

1. N叉树的层序遍历 首先我们遇到这个题目,没有任何思路,我们就可以来模拟一下层序的流程,首先我们肯定是访问根节点1,访问之后呢就是访问下一层的最左节点3,此时第一层的节点1已经访问过了就可以不要了,然…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时,你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…

消费增值:绿色积分引领电商潮流

消费增值的玩法确实为电商平台提供了一种新颖的用户激励机制,通过积分返利和增值机制,吸引消费者持续参与并提升用户粘性。以下是对您提供的信息的进一步解析和扩展: 消费增值玩法解析 商城消费返利: 每笔消费订单,商…

Celery Redis 集群版连接和PyCharm启动配置

目录 使用Redis cluster版作为broker原因 PyCharm配置 使用Redis cluster版作为broker 在celery5及其之前版本,需要配置如下才可行 celery_app.conf.update( broker_transport_options{“global_keyprefix”: “{celery}:”}, ) 原因 https://github.com/celery/…

深度学习:基于人工神经网络ANN的降雨预测

前言 系列专栏:【深度学习:算法项目实战】✨︎ 本专栏涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络(CNN)、递归神经网络 (RNN),包括长短期记忆 (LSTM) 、门控循环单元 (GRU)、自动编码器 (AE)、受限玻尔兹曼机(…

alist网盘自动同步

alist网盘自动同步 alist可以设置目录定时转存到各个网盘,做到夸网盘,多备份的效果可以将自己挂载的alist 下的各个目录相互间进行同步,原理是采用alist原始api调用执行,同步原理是匹配文件名称是否相同,相同会跳过同…

excel表格里,可以把百分号放在数字前面吗?

在有些版本里是可以的,这样做: 选中数据,鼠标右键,点击设置单元格格式,切换到自定义,在右侧栏输入%0,点击确定就可以了。 这样设置的好处是,它仍旧是数值,并且数值大小没…

grid的常见使用场景

场景1&#xff1a;固定几列显示&#xff0c;显示不下会自动换行 <div id"container"><div class"item item-1">1</div><div class"item item-2">2</div><div class"item item-3">3</div>&l…

vue 孙组件调用父组件的方法

通过组件内的 传递方法名称&#xff0c;可以实现孙组件调用父组件。 代码如下&#xff1a; index.html <!DOCTYPE html> <html> <head><meta charset"utf-8"><script src"/framework/vue-2.7.16.min.js"></script>…

C++奇迹之旅:string类对象的修改操作

文章目录 &#x1f4dd;string类的常用接口&#x1f320; string类对象的修改操作&#x1f309;push_back&#x1f309;append&#x1f309;operator&#x1f309;insert&#x1f309;erase&#x1f309;replace&#x1f309; find&#x1f309; c_str &#x1f320;测试string…

如何到《新英格兰医学杂志》 NEJM查找下载文献

《新英格兰医学杂志》NEJM是世界上阅读、引用最广泛、影响力最大的综合性医学期刊之一。NEJM集团出版的期刊还包括NEJM Journal Watch、NEJM Catalyst及NEJM Evidence。NEJM是一份全科医学周刊&#xff0c;出版对生物医学科学与临床实践具有重要意义的一系列主题方面的医学研究…

服务器远程桌面局域网连接不上的解决方法

在企业网络环境中&#xff0c;服务器远程桌面局域网连接不上是一个常见且棘手的问题。这种问题可能导致工作效率下降&#xff0c;甚至影响业务运营。因此&#xff0c;我们需要采取专业的方法来解决这一问题。 服务器远程桌面局域网连接不上的解决方法&#xff1a; 1、确保服务器…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第7章 安装VMwareTools

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

[单机]完美国际_V155_GM工具_VM虚拟机

[端游] 完美国际单机版V155一键端PC电脑网络游戏完美世界幻海凌云家园 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是…