13.Netty组件EventLoopGroup和EventLoop介绍

2024-05-11 23:52

本文主要是介绍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");}
}

这篇关于13.Netty组件EventLoopGroup和EventLoop介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981014

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

C++——stack、queue的实现及deque的介绍

目录 1.stack与queue的实现 1.1stack的实现  1.2 queue的实现 2.重温vector、list、stack、queue的介绍 2.1 STL标准库中stack和queue的底层结构  3.deque的简单介绍 3.1为什么选择deque作为stack和queue的底层默认容器  3.2 STL中对stack与queue的模拟实现 ①stack模拟实现

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,