大厂面试题-Netty中Reactor模式的理解

news2024/11/27 22:24:26

Reactor其实是在NIO多路复用的基础上提出的一个高性能IO设计模式。

它的核心思想是把响应IO事件和业务处理进行分离,通过一个或者多个线程来处理IO事件。

然后把就绪的事件分发给业务线程进行异步处理。

Reactor模型有三个重要的组件:

  1. Reactor:把I/O事件分发给对应的Handler
  2. Acceptor:处理客户端连接请求
  3. Handlers:执行非阻塞读/写,也就是针对收到的消息进行业务处理。

Reactor的这种设计中,有三种模型分别是

  1. 单线程Reactor模型。
  2. 多线程Reactor模型。
  3. 主从多Reactor多线程模型。

(如图),单线程Reactor型,就是由同一个线程来负责处理IO事件以及业务逻辑。这种方式的点在于handler的执行过程是串行,如果有任何一个handler处理线程阻塞,就会影响整个服务的吞吐量。

所以,就有了多线程Reactor模型(如图)。

也就是把处理IO就绪事件的线程和处理Handler业务逻辑的线程进行分离,每个Handler由一个独立线程来处理,在这种设计下,即便是存在Handler线程阻塞问题,也不会对IO线程造成影响。

在多线程Reactor模型下,所有的IO操作都是由一个Reactor来完成的,而且Reactor运行在单个线程里面。

对于并发较高的场景下,Reactor就成为了性能瓶颈,所以在这个基础上做了更进一步优化

提出了多Reactor多线程模型(如图),这种模式也叫Master-Workers模式。

它把原本单个Reactor拆分成了Main Reactor和多个Sub Reactor,

Main Reactor负责接收客户端的链接,然后把接收到的连接请求随机分配到多个sub Reactor里面。

Sub Reactor负责IO事件的处理。

这种方式另外一个好处就是可以对sub Reactor做灵活扩展,从而适应不同的并发量,解决了单个Reactor模式的性能瓶颈问题。

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

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

相关文章

基于单片机的可穿戴个人健康监测仪-智能手环

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、方案的设计与论证2.1设计任务及要求2.2 模块技术和方法综述2.3 设计可能遇到的困难 二、 系统总体框架3.1 硬件设计 三 软件部分4.1 主程序流程框 四、 结论五、 文章目录 概要 近几年智能化的不断发展&#…

GEE——提取制定多波段影像的属性值(按照制定属性名称和属性值)输出格式为矢量格式

简介: 这里我们很多时候,需要提取制定影像,或者多波段影像制定区域的值,这里有一个问题是我们一般输出的结果仅仅是一个字典类型的对象,而我们不知道如何按照一个矢量输入,这里我们首先要做的就是进行多波段值在制定区域的提取,随后就是分别对其新的字典的键、值的设定…

Leetcode76最小覆盖子串

思路:滑动窗口思想 1. 滑动窗口是什么:用一个滑动窗口为覆盖目标子串的字符串 2.怎么移动窗口:当不满足覆盖时右指针移动扩大范围,当覆盖了就移动左指针缩减范围直到再次不覆盖 3. 怎么判断是否覆盖:这里使用两个哈…

Qt封装的Halcon显示控件,支持ROI绘制

前言 目前机器视觉ROI交互控件在C#上做的比较多,而Qt上做的比较少,根据作者 VSQtHalcon——显示图片,实现鼠标缩放、移动图片的文章,我在显示和移动控件的基础上,增加了ROI设置功能,并封装成了一个独立的Q…

记录一次normal diskgroup添加磁盘组操作

客户的一个磁盘组空间快满,需要添加一下磁盘,磁盘组的冗余模式为normal,本来觉得是一件不难的事情,在添加过程中还是遇到了一些问题。 本来为2个500G的磁盘组成的normal模式磁盘组,目前可用空间只剩下170G左右的空间&…

【多线程】线程池总结带你详细了解线程池

文章目录 线程池标准库中的线程池Executors 创建线程池的几种方式ThreadPoolExecutor创建线程池 模拟实现线程池 线程池 线程池是一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配…

基于单片机的自动感应门设计

博主主页:单片机辅导设计 博主简介:专注单片机技术领域和毕业设计项目。 主要内容:毕业设计、简历模板、学习资料、技术咨询。 文章目录 主要介绍一、自动感应门设计的功能概述二、系统总体方案2.1系统的总体计划2.2元器件的介绍2.2.1单片机的…

全局安装 vue-cli 报错 Error: EPERM: operation not permitted, open

原因:没有权限 解决方法:CMD 点击右键 以管理员身份运行。

IDEA创建Springboot多模块项目

一、创建父模块 File --> New --> Project ,选择 “ Spring Initalizr ” ,点击 Next Next Next --> Finish 二、创建子模块 右键根目录,New --> Module 选择 “ Spring Initializr ”,点击Next 此处注意T…

ubuntu20.04配置解压版mysql5.7

目录 1.创建mysql 用户组和用户2.下载 MySQL 5.7 解压版3.解压 MySQL 文件4.将 MySQL 移动到适当的目录5.更改mysql目录所属的用户组和用户,以及权限6.进入mysql/bin/目录,安装初始化7.编辑/etc/mysql/my.cnf配置文件8.启动 MySQL 服务:9.建立…

【Linux】基本指令-入门级文件操作(三)

目录 基本指令 14 head指令 15 tail指令 管道 16 find指令 17 grep指令 18 zip&unzip指令 19 tar指令 20 su指令 总结 基本指令 14 head指令 功能:在屏幕上显示文件的内容,默认显示前10行,如果加上选项-n,则…

go测试库之apitest

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

万宾科技管网水位监测预警,管网水位的特点有哪些?

以往如果要了解城市地下排水管网的水位变化,需要依靠人工巡检或者排查的方式,这不仅加大了人员的工作量,而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况,都会降低市政府对排水管网的管理能力&a…

react_11

MobX 介绍 需求,组件0 改变了数据,其它组件也想获得改变后的数据,如图所示 这种多个组件之间要共享状态数据,useState 就不够用了,useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…

Mac下使用nvm,执行微信小程序自定义处理命令失败

环境 系统:Mac OS 终端:zsh CPU:M1/ARM架构 node环境:nvm,node20 node目录:/Users/laoxu/.nvm/versions/node/v20.1.0/bin/ 问题 在使用微信小程序的自定义处理命令时,启动失败 提示找不…

【算法挑战】常数时间插入、删除和获取随机元素(含解析、源码)

380.常数时间插入、删除和获取随机元素 https://leetcode-cn.com/problems/insert-delete-getrandom-o1/ 题目描述 设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。insert(val):当元素 val 不存在时,向集合中插入该项。 …

【快速解决】Android Button页面跳转功能

目录 让我们直接开始 第一步:先建立一个新的activity ​编辑 第二步:打开第一个页面的Java文件MainActivity 方法一:直接跳转功能如下: 方法二:输入密码才能进行跳转功能如下: 需要注意的地方 结语 让…

音视频报警可视对讲15.6寸管理机

音视频报警可视对讲15.6寸管理机 一、管理机技术指标: 1、15.6寸原装京东方工业液晶触摸屏,分辨率1920 (H) x 1080 (V); 2、1000M/100M自适应双网口; 4、按键设置:报警/呼叫按键,通话/挂机按键&#xff…

RabbitMQ 消息应答与发布

目录 一、消息应答 1、自动应答(默认) 2、手动消息应答的方法 ​编辑 3、消息重新入队 4、手动应答案列与效果演示 二、RabbitMQ持久化 1、队列持久化 2、消息持久化 三、不公平分发(能者多劳,弱者少劳) 1、…