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

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.hqwc.cn/news/157640.html

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

相关文章

HTTP/HTTPS、SSL/TLS、WS/WSS 都是什么?

有同学问我,HTTP/HTTPS、SSL/TLS、WS/WSS 这都是些什么?那我们就先从概念说起: HTTP 是超文本传输协议,信息是通过明文传输。HTTPS 是在 HTTP 的基础上信息通过加密后再传输。SSL 是实现 HTTPS 信息传输加密的算法。TLS 是 SSL 的…

UDP网络编程的接受与发送信息

/发送端B>可以接受数据 public class UDPSenderB {public static void main(String[] args) throws IOException {//创建一个DatagramSocket 对象,准备发送和接受数据DatagramSocket socket new DatagramSocket(9998);//将需要发送的数据,封装到Data…

数字化时代,谈谈数据资产这件事

在全球数字化转型的大趋势下,数据交易市场有望推动数据要素价值的开放共享和流通。据信通院测算,2021年全球47个重要经济体的数字经济增加值规模高达 38.1 万亿美元,我国2021年数字经济规模也已达到7.1万亿美元。数据之于数字经济的价值不言而…

双十一最畅销的商品、值得入手的数码好物推荐

今年双十一大家都入手了哪些好物呢?不得不说今年的年中大促还是非常贴心的,不仅活动期延长了,开启预热的时间同样提前不少,这无疑给我们消费者留了充足的时间更好地挑选自己心仪的产品。作为一名数码爱好者,双十一当然…

C语言队列实现

1.知识百科 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的…

Android开发笔记(三)—Activity篇

活动组件Activity 启动和结束生命周期启动模式信息传递Intent显式Intent隐式Intent 向下一个Activity发送数据向上一个Activity返回数据 附加信息利用资源文件配置字符串利用元数据传递配置信息给应用页面注册快捷方式 启动和结束 (1)从当前页面跳到新页…

【Elasticsearch 未授权访问漏洞复现】

文章目录 一、漏洞描述二、漏洞复现三、修复建议 一、漏洞描述 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布&am…

Learning to Segment Rigid Motions from Two Frames 代码复现

环境配置 https://github.com/gengshan-y/rigidmask 1.拉取代码 git clone https://github.com/gengshan-y/rigidmask.git cd rigidmask2.创建conda环境,修改rigidmask.yml name: rigidmask channels:- pytorch- pytorch3d- conda-forge- defaults dependencies…

什么情况会造成电表不走数?

电表是衡量用电量的重要设备,一旦出现不走数的情况,不仅会影响用户对用电量的准确计算,还可能造成电费纠纷。那么,究竟什么情况下会造成电表不走数呢?接下来,小编来为大家介绍下,一起来看下吧&a…

FPGA时序分析与约束(8)——时序引擎

一、概述 要想进行时序分析和约束,我们需要理解时序引擎究竟是如何进行时序分析的,包括时序引擎如何进行建立分析(setup),保持分析(hold),恢复时间分析(recovery)和移除时间分析(removal)。 二、时序引擎进…

第十三章,枚举与泛型例题

例题1 package 例题;interface SeasonInterface{//四季接口int SPRING 1, SUMMER 2, AUTUMN 3, WINTER 4; }enum SeasonEnum{//四季枚举SPRING,SUMMER,AUTUMN,WINTER }public class 例题1 {//定义方法public static void printSeason1(int season){switch (season) {case …