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对象,指定线程数量为2EventLoopGroup 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@4ec6a292log.info("eventLoop2={}", eventLoop2); //io.netty.channel.nio.NioEventLoop@1b40d5f0log.info("eventLoop3={}", eventLoop3); //io.netty.channel.nio.NioEventLoop@4ec6a292log.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.mzph.cn/news/835770.shtml

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

相关文章

华为数据之道第三部分导读

目录 导读 第三部分 第7章 打造“数字孪生”的数据全量感知能力 “全量、无接触”的数据感知能力框架 数据感知能力的需求起源:数字孪生 数据感知能力架构 基于物理世界的“硬感知”能力 “硬感知”能力的分类 “硬感知”能力在华为的实践 基于数字世界的…

hbase shell 启动报错问题

报错1: stopping hbasecat: /tmp/hbase-hadoop-master.pid: No such file or directory 报错2: ERROR [main] zookeeper.RecoverableZooKeeper: ZooKeep 解决: 看看你启动的hbase路径是不是错了,大概率是这种问题 不是启动hb…

Vuex:Vue.js 的状态管理库

一、Vuex 简介 Vuex 是 Vue.js 的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 的出现解决了组件间共享状态的问题,使得状态管理变得简单、可预测和可维护。 二、Vuex 核心概…

快递物流查询:如何实现快递批量查询?这些技巧助你轻松应对

在日常生活和工作中,我们经常需要查询快递物流信息,尤其是当面对大量的快递包裹时,逐一查询无疑会耗费大量的时间和精力。这时,实现快递批量查询就显得尤为重要。本文将为你介绍办公提效工具一些实现快递批量查询的技巧&#xff0…

如何将draw.io的图导入word

解决办法(有点点复杂) 先在http://draw.io导出格式为svg矢量图格式,然后用visio打开svg,调整完界面等等之后再保存,然后在word里面插入visio

Android 13 aosp 默认关闭SELinux

通过adb修改 adb root adb shell setenforce 0 // 开SELinux,设置成模式permissive adb shell setenforce 1 // 关SELinux,设置成模式enforce adb shell getenforce // 获取当前SELinux状态源码修改 Android_source/system/core/init/selinu…

FFmpeg常用API与示例(一)—— 工具库篇(av_log、AVDictionary、avio)

工具层 1.av_log 可以设置日志的级别,这个看看名字就明白了,也不用过多的解释。 AV_LOG_PANICAV_LOG_FATALAV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_VERBOSEAV_LOG_DEBUG void test_log() {/ av_register_all();AVFormatContext *pAVFmtCtx NU…

分布式事务技术方案

什么是分布式事务 一次课程发布操作需要向数据库、redis、elasticsearch、MinIO写四份数据,这里存在分布式事务问题。 什么是分布式事务? 首先理解什么是本地事务? 平常我们在程序中通过spring去控制事务是利用数据库本身的事务特性来实现…

Offline: Overcoming Model Bias for Robust Offline Deep Reinforcement Learning

EAAI 2023 paper Intro model-free的离线强化学习由于价值函数估计问题存在训练的稳定性以及鲁棒性较低。本文提出基于模型的方法,同构构建稳定的动力学模型帮助策略的稳定训练。 method 本文基于模型的方法,所构造的转移模型输入状态动作&#xff0…

图鸟模板-官网:基于Vue 3的前端开发新篇章

一、引言 随着前端技术的飞速发展,企业对于官网的需求也从简单的展示型网站向功能丰富、交互体验良好的方向转变。在这样的背景下,图鸟模板-官网以其基于Vue 3的纯前端开发特性,以及支持微信小程序、支付宝小程序、APP和H5的跨平台能力&…

Android Native发布广播Intent步骤和原理解析

Android Native层发布广播Intent步骤和原理解析 一、Native层发送广播的机制和原理1.1 广播发送接口1.2 应该如何去发送广播1.3 调用流程1.4 IActivityManager.java 二、具体实现2.1 cpp实现代码2.2 实现过程遇到的问题2.3 发送多个值 最近出于工作需要,要在Native层…

REFORMER: 更高效的TRANSFORMER模型

大型Transformer模型通常在许多任务上都能达到最先进的结果,但是训练这些模型的成本可能会非常高昂,特别是在处理长序列时。我们引入了两种技术来提高Transformer的效率。首先,我们用一种使用局部敏感哈希的点积注意力替换了原来的点积注意力…

验证码生成--kaptcha

验证码生成与点击重新获取验证码 如图所示&#xff0c;本文档仅展示了验证码的生成和刷新显示。 1. 概述 系统通过生成随机验证码图像和文本。 2. 代码分析 2.1. Maven依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptch…

JAVA基础--File

文件 为什么要知道文件 在计算机磁盘中&#xff0c;文件是一个非常重要的存在&#xff0c;大家知道我们数据都是保存在计算机磁盘&#xff0c;而磁盘以文件为载体&#xff0c;将信息存储在磁盘文件中&#xff0c;接下来我们学习的IO流也主要是对文件中的数据进行读写操作&…

第四百九十九回

文章目录 1. 概念介绍2. 使用方法2.1 固定样式2.2 自定义样式 3. 示例代码4. 内容总结 我们在上一章回中介绍了"GetMaterialApp组件"相关的内容&#xff0c;本章回中将介绍使用get显示SnackBar.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在介…

毕业论文凑字数——关于IVR自动语音应答交互式电话导航自动总机等等概念的一些剖析

目录 IVR毕业论文的讨巧思路IVR自动语音应答IVR的使用流程IVR的各种应用IVR的基本配置 一个小朋友的毕业论文要凑字数&#xff0c;所以推荐她讲一讲IVR&#xff0c;因为IVR可以翻译的名字很多&#xff0c;比如交互式语音应答&#xff0c;自动语音应答&#xff0c;自动语音服务&…

C语言例题36、判断一个数是否是回文数

题目要求&#xff1a;输入一个5位数&#xff0c;判断它是不是回文数。即12321是回文数 #include <stdio.h>int main() {int x;int ge, shi, qian, wan;printf("请输入一个5位数&#xff1a;");scanf("%d", &x);ge x % 10; //个sh…

Xshell连接提示“SSH服务器拒绝了密码”

原因1&#xff1a;数字锁没有打开 没有打开NumLock&#xff08;数字小键盘上面有一个【Num】按键&#xff09;&#xff0c;需要按键开启。 注意要检查NumLock灯是否亮起。 或者改成用字母键上面的数字键输入就好了。 原因2&#xff1a;root密码设置错误&#xff08;这个是比较常…

fatal error: ros/ros.h: 没有那个文件或目录

解决方法&#xff1a; 在出错的文件的包下的CMakeLists.txt文件里&#xff0c;加上 find_package(catkin REQUIRED COMPONENTSroscpp )include_directories(include ${catkin_INCLUDE_DIRS} )【ROS-解决问题】 fatal error: ros/ros.h: 没有那个文件或目录-CSDN博客

GO语言核心30讲 实战与应用 (第三​部分)

原站地址&#xff1a;Go语言核心36讲_Golang_Go语言-极客时间 一、io包中的接口和工具