13.Netty组件EventLoopGroup和EventLoop介绍

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");
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法

复数移相,也称为复数相位旋转,就是在原有复数的基础上,不改变模数,只把相位角做一定的偏移。 三角函数移相 三角函数移相法,是利用模数和实部虚部之间的三角函数关系,从原复数求得新复数。在Simulink中建立…

download_file、download

download_file源码 def download_file(url: str, fname: str, chunk_size1024):"""Helper function to download a file from a given url"""resp requests.get(url, streamTrue)total int(resp.headers.get("content-length", 0))…

Python+PySpark数据计算

1、map算子 对RDD内的元素进行逐个处理,并返回一个新的RDD,可以使用lambda以及链式编程,简化代码。 注意:再python中的lambda只能有行,如果有多行,要写成外部函数;(T)-&…

ISIS学习二——与OSPF相比的ISIS报文以及路由计算

目录 一.ISIS支持的网络类型 1.OSPF支持 2.ISIS支持 二.ISIS最优路径的选取 (1).ISIS开销值设置 1.全局开销 2.接口开销 3.根据带宽设置开销 (2).ISIS的次优路径 三.ISIS报文格式 1.ISIS专用报头——TLV 2.ISIS通用头…

Java 【数据结构】 哈希(Hash超详解)HashSetHashMap【神装】

登神长阶 第十神装 HashSet 第十一神装 HashMap 目录 👔一.哈希 🧥1.概念 🩳2.Object类的hashCode()方法: 👚3.String类的哈希码: 👠4.注意事项: 🎷二.哈希桶 🪗1.哈希桶原理 &#x…

车载测试和传统测试有什么区别

搞清楚车载测试和传统应用测试的区别,就可以大胆冲冲冲! 车载测试随着市场的需求量增加又火来一波,一直’遥遥领先’的我们一定要告诉大家一个事实:车载测试和传统的应用测试是有很大区别的. 测试对象不一样 传统测试:测试的对象无非就是各种应用,比如电脑端的web系统(使用浏…

苹果电脑MAC清理系统空间工具CleanMyMacX4.15.3中文版下载

苹果电脑以其出色的性能、优雅的设计和高效的操作系统而受到许多用户的喜爱。然而,随着时间的推移和使用量的增加,你可能会发现你的Mac开始变得缓慢和响应迟缓。这通常是因为硬盘空间被大量占用,影响了系统的整体性能。幸运的是,有…

树莓派遇到ping的奇葩问题解决办法

首先,先 ping raspberrypi 一下。获得树莓派的ip 然后开始配置静态ip winR后输入命令ipconfig查询当前网关ip 输入命令sudo nano /etc/dhcpcd.conf 在最末尾输入以下信息 -----------------------------------------------------------------------------------…

【Java EE】网络原理——TCP1

目录 1.TCP协议格式 2.TCP协议的特点 3.TCP协议的核心机制(十个) 3.1确认应答机制 3.2超时重传 3.3连接管理 3.3.1三次握手基本流程: 3.3.2三次握手的意义或者解决的问题:(面试题) 3.3.3三次握手时…

32.768kHz晶振的时间精度问题及其解决方法

32.768kHz晶振因其稳定性高、功耗低,被广泛应用于实时时钟(RTC)、计时电路及低功耗电子产品中。然而,在某些情况下,这些晶振可能出现时间偏差,影响设备正常工作。以下是可能导致32.768kHz晶振时间误差的原因及相应的解决策略。 温…

DDD架构理论详解

文章目录 一、概念入门1. 概念简介2. DDD的核心理念3. 范式4. 模型5. 框架6. 方法论7. 软件设计的主要活动 二、DDD核心理论1. Domain领域层都包含什么?2. 聚合、实体和值对象3. 仓储,封装持久化数据4. 适配(端口),调用…

计算机服务器中了locked勒索病毒怎么解决,locked勒索病毒解密恢复工具

在网络技术飞速发展的时代,通过网络开展各项工作业务成为众多企业的首选,网络也为企业的生产运营提供了极大便利,大大提升了企业办公效率,但是利用网络避免不了网络威胁的存在,数据安全问题一直是企业关心的主要话题。…

软件测试之 性能测试 性能测试基础指标 Loadrunner、Jmeter等工具

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github gitee 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我会尽力带来有趣的内容 本文档基于 https://www.bilibili.com/video/BV1wC4y1Y…

AJ65SBT2B-64DA 三菱CC-Link D/A转换模块

AJ65SBT2B-64DA 是将数字值(16位有符号BIN数据)转换为模拟值(电压或电流)的模块。 AJ65SBT2B-64DA参数说明:4通道;输入分辨率0~12000,-12000~12000,-16000~16000;输出DC-10~10V,DC0~20mA;转换速…

算法提高之电路维修

算法提高之电路维修 核心思想:双端队列bfs dijkstra算法的拓展情况:边权(旋转次数)只有0和1 dijkstra算法要求:每次取离原点最近的点 去更新其他相邻点距离(多次) 如何实现:将所有边权为0的边连的点放入队头,边权为1的…

社交媒体数据恢复:密聊猫

一、概述 密聊猫是一款提供多种优质体验的手机社交聊天软件。通过这款软件,用户可以享受到多种不同的乐趣体验,如真人在线匹配、真实的交友体验等。同时,密聊猫也提供了数据恢复功能,帮助用户找回丢失的数据。 二、数据恢复步骤…

[算法][数组][leetcode]2391. 收集垃圾的最少总时间

题目地址: https://leetcode.cn/problems/minimum-amount-of-time-to-collect-garbage/description/ 题解: class Solution {public int garbageCollection(String[] garbage, int[] travel) {int ans 0;//先计算收所有的垃圾需要多少时间for(String s :garbage){…

HR人才测评,表达能力与岗位胜任力素质测评

什么是表达能力? 表达能力指的就是在语言能力基础之上发展形成的一种语用能力,可以结合自己所掌握的语言来实现交际的目的,能正确且灵活的把语言材料组合成为语言并且表达出想要表达的内容。 在百度百科中有如此定义,表达能力…

软件测试用例

测试用例的目的:为了实施测试面向测试系统提供的一组集合,这组集合包含:测试环境,操作步骤,测试数据,预期结果等要素 注:测试用例覆盖率越高,说明测试质量越高 测试用例覆盖率越低&…

大数据测试

1、前言 大数据测试是对大数据应用程序的测试过程,以确保大数据应用程序的所有功能按预期工作。大数据测试的目标是确保大数据系统在保持性能和安全性的同时,平稳无差错地运行。 大数据是无法使用传统计算技术处理的大型数据集的集合。这些数据集的测试涉…