smart Java——Netty实战(上):select/poll/epoll、NIOReactor模型

news2024/11/8 13:47:41

文章目录

  • 1.多路复用——select、poll、epoll底层原理
  • 2.NIOReactor模型
    • (1)单Reactor单线程模型
    • (2)单Reactor多线程模型
    • (3)主从Reactor多线程模型(Netty)
  • 3.Netty核心组件
    • (1)网络通信层
    • (2)事件调度层
    • (3)服务编排层
  • 4.Netty工作流程
  • 参考

在此之前,我撰写了一篇介绍BIO、NIO、AIO的博客。

在这篇博客中,我将进一步介绍Java IO模型的相关知识,和Netty框架的核心知识。

1.多路复用——select、poll、epoll底层原理

从操作系统层面来说,多路复用的实现涉及三个函数:

在这里插入图片描述

  • select/poll函数的读写工作原理:
    3和4表示读取数据
    在这里插入图片描述

局限性:
需要将fd数据从用户空间拷贝至内核空间;
获取就绪文件描述符需要遍历fd数组,时间复杂度为O(n)。

  • epoll工作原理:
    2、4、5表示读取
    在这里插入图片描述

解决了select和poll的两大局限性,能获得更高的执行效率。

  • 使用场景分析:
    当连接数较少,并且读写较为活跃时,使用select、poll能获得更好的性能;
    当连接数较多,并且大多都不活跃时,使用epoll性能更好。

2.NIOReactor模型

(1)单Reactor单线程模型

只有一个线程来执行所有的任务,效率低下,并且也有可靠性问题。

在这里插入图片描述

(2)单Reactor多线程模型

相比于上一个模型,增加了线程池的支持,从一定程度上提升了并发效率,但是引入线程池可能会涉及到数据同步问题。Redis底层就是基于这种模型。

在这里插入图片描述

(3)主从Reactor多线程模型(Netty)

在上一个模型的基础上,一个Reactor变成了两个,主Reactor创建连接,从Reactor分发读写任务,能支持更高的并发量。Netty是基于这种模型。
在这里插入图片描述

3.Netty核心组件

(1)网络通信层

  • Bootstrap:
    负责客户端启动并用来连接远程Netty Server。
    不过不用Bootstrap,用websocket也可以。

  • ServerBootstrap:
    负责服务端监听指定端口。

  • Channel:
    完成网络通信的载体。

(2)事件调度层

  • EventLoopGroup:
    线程池,负责接收IO请求,并分配线程执行任务。

  • EventLoop:
    线程池中的线程。

(3)服务编排层

  • ChannelHandler:
    通过指定的handler处理数据IO。

  • ChannelHandlerContext:
    保存ChannelHandler的上下文。

  • ChannelPipeline:
    将多个ChannelHandler链接在一起。

4.Netty工作流程

在这里插入图片描述

参考

https://www.bilibili.com/video/BV12V4y1r7kU?p=2&vd_source=b7379453017b92a8beb445062eadf332

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

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

相关文章

备战金九银十,互联网大厂1000道java高频面试知识点(附答案,赶紧收藏)

Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。…

卷积实现—im2col+gemm

普通卷积 看卷积的实现,先看其普通的计算方式:滑窗计算和其计算shape大小的公式,以及各个卷积特性对其计算的影响,比如:stride,group,dilation,pad等。 H o u t ( H i n − k h p …

OpenGL 帧缓冲

1.简介 我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲&#x…

Fiddler不仅可以抓包,还可以做接口测试喔

前言 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,Fiddler做接口测试也是非常方便的。对应没有接口测试文档的时候,可以直接抓完包后,copy请求参数,修改下就可以了。 Composer简介 点开右侧Co…

模拟电路系列分享-晶体管的四种状态

目录 概要 整体架构流程 技术名词解释 1.截止状态 2.放大状态 3.饱和状态 4.倒置状态 技术细节 小结 概要 提示:这里可以添加技术概要 晶体管有4种工作状态,分别是截止、放大、饱和,以及倒置。 整体架构流程 提示:这里可以添加…

黑马程序员前端 Vue3 小兔鲜电商项目——(九)购物车

文章目录 本地购物车添加购物车头部购物车模板代码渲染数据 删除功能实现购物车统计信息列表购物车-基础内容渲染模版代码路由配置渲染列表 列表购物车-单选功能实现列表购物车-全选功能实现列表购物车-统计数据功能实现 接口购物车加入购物车删除购物车 退出登录-清空购物车购…

Matplotlib - 绘制 带有对角线的散点图 (Diagonal Scatter Plots) 函数源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131384440 Matplotlib 是一个用于绘制二维图形的 Python 库,提供了一个 pyplot 模块,用于创建各种类型的图表。其…

实战经验---好用的Midjourney提示词

说明:本文基于Midjourney(下称MJ)官方说明书整理,分2篇文章发布,这是第1篇。内容主要包括绘画指令(Prompt)、提示、参数、设置、模型选择等。 由于是整理文本,过程中个别地方为了显…

应对流量损耗:提升APP广告变现效果的关键策略!

​引言: 在APP广告变现的过程中,流量损耗是一个常见的问题,它不可避免地会发生。尽管开发者可以在合理的范围内承受这种损耗,但如果出现大范围的损耗,那就意味着在广告变现过程中出现了一些问题,限制了开发…

ThreadPoolExecutor的有参构造

核心要点 通过查看ThreadPoolExecutor里面的构造方法可以发现都是调用了方法参数最多的那个。 参数最多的构造方法展示 映入眼帘的是一些健壮性校验corePoolSize < 0&#xff1b;可以发现这个判断是核心线程的个数不能小于零。但是也就说明核心线程的个数可以等于零。maxim…

LLM - 搭建 DrugGPT 与药物分子领域结合的 ChatGPT 系统

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131384199 论文&#xff1a;DrugChat: Towards Enabling ChatGPT-Like Capabilities on Drug Molecule Graphs DrugChat&#xff0c;基…

【简单认识Nginx服务性能与安全优化】

文章目录 Nginx隐藏版本相关信息1.隐藏版本号2.修改版本号及相关信息 二、修改Nginx运行时的属主和属组三、配置Nginx网页缓存时间四、配置Nginx站点日志分割五、设置Nginx长连接及超时时间六、配置Nginx网页压缩七、配置Nginx防盗链1.模拟盗链2.配置防盗链并测试 Nginx隐藏版本…

【算法】数学相关知识总结

文章目录 gcd 和 lcm取模运算 %求一个点和一片矩形区域之间的最短距离 本文用于记录一些关于算法题中偶尔被使用到的数学相关知识。 gcd 和 lcm gcd 和 lcm 分别是 最大公约数&#xff08;Greatest common divisor&#xff09; 和 最小公因数&#xff08;Least Common Multip…

Nginx-redis【会话保持】

什么是会话保持 当用于登录一个网站服务器&#xff0c; 网站服务器会将用户的登录信息存储下来&#xff08;存储session&#xff09;&#xff0c;以保证我们能一直处于登录在线的状态 为什么要做会话保持 由于我们使用的是负载均衡轮询机制&#xff0c;会导致用户请求分散在…

nginx页面优化

文章目录 nginx页面优化一.nginx优化1.版本号1.1查看版本号1.2修改版本号1.2.1修改配置文件1.2.2修改源码文件&#xff0c;重新编译安装 2.nginx的日志分割2.1 写日志分割的脚本2.2给脚本执行权限、执行2.3创建定时任务可以每个月固定分割一次 3.nginx的页面压缩3.1配置3.2验证…

第1讲 Camera Sensor Driver课程简介

更多资源&#xff1a; 资源描述在线课程极客笔记在线课程知识星球星球名称&#xff1a;深入浅出Android Camera 星球ID: 17296815Wechat极客笔记圈 课程内容介绍 目标&#xff1a; 课程主要帮助大家理解camera sensor基本概念及原理知识&#xff0c;理解高通camera sensor驱…

前端开发——常用案例分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

美one,不想只做李佳琦背后的MCN

文 | 螳螂观察 作者 | 青月 今年618&#xff0c;处在消费提振的关键时期&#xff0c;又面临着行业竞争日趋激烈&#xff0c;各大电商平台都希望能交出一份让市场满意的“期中答卷”&#xff0c;直播不可避免的成为了“兵家必争之地”。 京东请来了罗永浩与“交个朋友”入驻&a…

抖音seo矩阵系统源码|需求文档编译说明(二)

目录 1.抖音seo矩阵系统文档开发流程 2.各平台源码编译方式说明 3.底层技术功能表达式 1.抖音seo矩阵系统文档开发流程 ①产品原型 ②需求文档 ③产品流程图 ④部署方式说明 ⑤完整源码 ⑥源码编译方式说明 ⑦三方框架和SDK使用情况说明和代码位置 ⑧平台操作文档 ⑨程序架…

完美外贸企业邮箱签名设置指南:提升专业形象,优化商务沟通

邮箱签名是一个很好的方式&#xff0c;让您的外贸企业觉得你的公司比较专业。它可以包括公司名称和标志&#xff0c;联系信息和其他相关信息。以下是一些指导原则&#xff0c;可以帮助您创建适合您业务的邮箱签名: 第一步:选择一个合适的Logo 选择一个适合你的企业的标志是很重…