Netty对Channel事件的处理以及空轮询Bug的解决

继续上一篇Netty文章,这篇文章主要分析Netty对Channel事件的处理以及空轮询Bug的解决

当Netty中采用循环处理事件和提交的任务时

由于此时我在客户端建立连接,此时服务端没有提交任何任务

此时select方法让Selector进入无休止的阻塞等待

此时selectCnt++进行一次计数,ioRatio用来设置处理非事件任务所占总事件的比例

紧接着进入processSelectedKeys方法内部,处理连接事件

由于NioEventLoop中维护了一个Selector,这里的SelectedKeys是对原始Selector中的SelectedKeys的一种优化,后续文章会总结Netty做的优化

这段代码作用就是获得到对应事件,然后通过附件的方式拿到NioServerSocketChannel

紧接着利用NioServerSocketChannel中的unsafe类完成消息的写出的读入

调用unsafe的read方法后,通过read方法中的doReadMessages拿到Java ServerSocketChannel建立的SocketChannel

拿到SocketChannel后,创建一个NioSocketChannel,并创建对应的pipleline,config等等和NioServerSocketChannel一样。然后把它暂存在一个List集合buf中

紧接着调用NioServerSocketChannel的pipleline方法出发read事件,这里提醒一下pipleline的组成一次是head,logging,acceptor,tail组成

此方法内部其实就是不断的查找下一个Handler,调用Read方法

并且由于一些任务比较耗时为了不阻塞链接线程可以使用自己设置线程组

当轮到acceptor方法处理时

注意:这里的childHandler是我们在server端最开始的strap代码时填入childHandler属性中的Handler,同时下方的childGroup就是server端最开始的childNioEventLoopGroup

接下来register方法内部就是我们上一篇文章讲到的进行线程切换,把NioSocketChannel以附件的形式绑定到SocketChannel。由于每个NioEventLoop都维护了一个Selector,同时把SocketChannel注册到(child)NioEventLoopGroup中的NioEventLoop中的Selector接着继续循环监听事件处理提交的任务。分析到这里我们可以理解Netty的基本线程模型了

接下来连接事件处理完毕,BossGroup该处理普通任务了

可以看到ioRation是控制所占用时间的比例的

而selectCnt是为了避免在Linux中导致selector不阻塞从而进行计数,当超过512时就认为出现bug,Netty解决方法就是重新创建一个Selector,并把原始信息复制一份。

接下来我们研究数据的发送和读写

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

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

相关文章

骗子查询系统源码

源码简介 小权云黑管理系统 V1.0 功能如下: 1.添加骗子,查询骗子 2.可添加团队后台方便审核用 3.在线反馈留言系统 4.前台提交骗子,后台需要审核才能过 5.后台使用光年UI界面 6.新增导航列表,可给网站添加导航友链 7.可添加云黑类…

Flink系列之:Flink SQL Gateway

Flink系列之:Flink SQL Gateway 一、Flink SQL Gateway二、部署三、启动SQL Gateway四、运行 SQL 查询五、SQL 网关启动选项六、SQL网关配置七、支持的端点 一、Flink SQL Gateway SQL 网关是一项允许多个客户端从远程并发执行 SQL 的服务。它提供了一种简单的方法…

Flink集群主节点JobManager启动分析

1.概述 JobManager 是 Flink 集群的主节点,它包含三大重要的组件: ResourceManager Flink集群的资源管理器,负责slot的管理和申请工作。 Dispatcher 负责接收客户端提交的 JobGraph,随后启动一个Jobmanager,类似 Yarn…

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

初级:用好手上的锤子 1 【感性】认识 C 系编程语言开发调试过程 1.1 视频教程点到为止 1.2 炫技视频看看就行 1.3 编程游戏不玩也罢 有些游戏的主题任务就是编程,游戏和实际应用环境有一定差异(工具、操作流程),在…

C# OpenCv Haar、LBP 人脸检测

目录 效果 代码 下载 效果 代码 using OpenCvSharp;namespace OPenCVDemo {class Program{static void Main(string[] args){// Load the cascadesvar haarCascade new CascadeClassifier("haarcascade_frontalface_default.xml");var lbpCascade new Casca…

1学习使用axios

一、axios介绍: axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它提供了一种简单的方法来发送 HTTP 请求,并且具有很多实用的功能,使得网络请求变得更加方便和可靠。 以下是 axios 的一些主要特点和功能&…

【笔记】RDD算子操作(Spark基础知识)

持续更新中!!! 目录 一、RDD的创建 1.从本地创建 (1)本地文件 (2)hdfs文件(先提前创建目录并上传文件) 2.从集合创建(通过并行集合(列表&am…

学点Java_Day12_JDBC

1 JDBC 面向接口编程 在JDBC里面Java这个公司只是提供了一套接口Connection、Statement、ResultSet,每个数据库厂商实现了这套接口,例如MySql公司实现了:MySql驱动程序里面实现了这套接口,Java程序员只要调用实现了这些方法就可以…

如何调试Clang源码

下载编译Clang 这个就直接去LLVM官网下载,然后编译好Clang就行,注意得debug模式,保存符号信息。 调试Clang 可以直接通过命令行来调试 #进入调试环境,这里的clang得是刚刚编译好的 lldb ./clang # r是运行,后面是正…

电脑关机速度很慢怎么解决?

给电脑关机,总是要很久才完全关闭。这是因为计算机运行了太长时间,并且打开的程序太多,则关闭时间超过十秒钟,这是正常的现象。还有就是计算机升级或补丁程序更新也将导致计算机缓慢关闭。此时,建议耐心等待关闭完成。…

离心式风机运行效率测算

1.总压静压动压; 2.动压0.5空气体密度风速2; 风机所需功率P(KW):PQp/(36001000η0η1) Q—风量,m3/h; p—风机的全风压,Pa; η0—风机的内效率&a…

计算机网络-RIP动态路由协议简介

一、概述 前面我们学习了动态路由协议按照工作机制及算法划分可以分为:距离矢量路由协议DV型和链路状态路由协议LS型。RIP就是典型的距离矢量路由协议,但是实际工作中用得已经比较少了。 距离矢量路由协议DV: RIP 链路状态路由协议LS: OSPF IS-IS 二、RI…

深入Spark与LDA:大规模文本主题分析实战

使用LDA模型和Spark进行文本主题分析 本篇博客介绍了如何使用LDA(潜在狄利克雷分配)模型和Spark进行文本主题分析。我们的目标是从大量的用户评论中提取出主题。 1. 环境设置 首先,我们需要导入所需的库,包括jieba(…

Java八股文(JVM)

Java八股文のJVM JVM JVM 什么是Java虚拟机(JVM)? Java虚拟机是一个运行Java字节码的虚拟机。 它负责将Java程序翻译成机器代码并执行。 JVM的主要组成部分是什么? JVM包括以下组件: ● 类加载器(ClassLoa…

当当狸智能激光雕刻机 多种材质自由雕刻,轻松打造独一无二的作品

提及“激光雕刻”,大多数人的印象一般都是:笨重巨大、价格昂贵、操作复杂、使用门槛较高、调试难度大...不是普通人能够随意操作的,让人望尘莫及。 而小米有品上新的这台「当当狸桌面智能激光雕刻机L1」,将超乎你的想象&#xff…

JimuReport积木报表 v1.7.4 公测版本发布,免费的JAVA报表工具

项目介绍 一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报…

【C语言基础】:数据在内存中的存储

文章目录 一、整数在内存中的存储二、大小端字节序和字节序判断1. 为什么有大小端?2. 练习 三、浮点数在内存中的存储1. 浮点数的存储1.1 浮点数的存储过程1.2 浮点数取的过程 四、题目解析 书山有路勤为径,学海无涯苦作舟。 创作不易,宝子们…

轻量级检测模型效果一定差?基于轻量级目标检测模型构建布匹瑕疵检测模型,对比分析不同分辨率图像尺度对模型效果的影响

瑕疵类的检测模型如:工业部件瑕疵、瓷砖瑕疵、PCB瑕疵、布匹瑕疵等等,在我们之前的博文中已经有过很多相关的开发实践了,这里就不再一一列举了,感兴趣的话可以直接搜索关键字信息博文内容即可一键直达。 因为本文的实验对象选择的…

structured bindings is supported from c++17

结构化绑定可以绑定结构体、数组和 tuple-like 对象。 完整示例&#xff1a; #include <iostream> #include <format> #include <iomanip>void test_00(){struct Box{int width_;int height_;std::string name_;};Box box{3,4,"amazing"};auto [w…

YOLOv9改进策略 | 损失函数篇 | InnerIoU、InnerMPDIoU二次创新损失函数助力小目标检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是InnerIoU以及包含其它二次创新的代码InnerCIoU、InnerMPDIoU等一些列利用Inner形成的二次创新损失函数&#xff0c;到此大家可能比较模糊为啥Inner能够和其他损失函数形成二次创新&#xff0c;Inner又是一个什么样的机制&#xff0c;开…