Reactor模式
创始人
2024-06-01 16:10:14

Reactor是一种设计模式,可以用于构建高并发的网络服务器。
Reactor模式的好处在于:可以在一个或多个reactor线程使用多路复用技术去管理所有网络连接连接建立、IO请求,保证工作线程不被IO阻塞。
前置知识:IO多路复用技术

1. 传统网络线程模型

在这里插入图片描述
如图所示,传统网络线程模型在每个客户端连接建立完成之后,会为这个客户端连接船舰一个新的线程去处理IO请求,以及进行计算。这种模式实际上对应了我们之前说过的BIO,也就是说,每个线程在客户端数据准备阶段都是被阻塞的,虽然这段时间线程什么都不需要干,但是它却无法脱身。

这样的网络模型既浪费线程资源,又受制于线程数量。

2. Reactor模型

reactor模型实际上就是对前文提到的epoll机制的封装。我们使用reactor线程去处理客户端的连接、IO事件;使工作线程从IO中抽身,只专注于事件的处理。Reactor线程会遍历所有客户端连接,一旦发现其中数据准备完毕,便会将事件分发给工作线程,由工作线程完成后续处理。

根据Reactor线程数量,Reactor模型可以被分为三种:单Reactor单线程、单Reactor多线程、主从Reactor。

2.1 单Reactor单线程

在这里插入图片描述
在这个模式中,只有一个Reactor线程,Reactor既要处理客户端连接,又要进行处理IO,在得知某些连接的IO准备完毕之后,Reactor线程还需要对对应的事件进行处理。

2.2 单Reactor多线程

在上面的单Reactor单线程模型中,Reactor确实可以使用epoll机制监听多个连接,但是对于业务处理,它还是需要串行处理的;如果业务处理很耗时,或者业务量比较大,单Reactor单线程模型就力不从心了。

解决办法页很简单,Reactor线程仅仅处理客户端的连接建立、IO操作。当监测到某些连接的数据就绪时,将业务处理交给一个多线程线程池去处理。
在这里插入图片描述

2.3 多Reactor多线程模型

当客户端连接很多,单个Reactor线程无法应对所有连接的建立、IO操作时,我们使用计算机领域的经典思想:负载均衡。我们使用多个Reactor线程去处理IO操作,将Reactor线程分为一个MainReactor和多个SubReactor。MainReactor负责接收客户端请求,然后acceptor将客户端的连接负载均衡配分到多个SubReactor上,每个SubReactor只需要处理被分配到的客户端连接的读写请求。
在这里插入图片描述

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...