【博学谷学习记录】超强总结,用心分享|架构师-Reactor线程模型

Reactor线程模型

Reactor线程模型不是Java专属,也不是Netty专属,它其实是一种并发编程模型,是一种思想,具有指导意义Reactor模型中定义了三种角色:
1、Reactor:负责监听和分配事件,将I/O事件分派给对应的Handler。新的事件包含连接建立就绪、读就绪、写就绪等。
2、Acceptor:处理客户端新连接,并分派请求到处理器链中。
3、Handler:将自身与事件绑定,执行非阻塞读/写任务,完成channel的读入,完成处理业务逻辑后,负责将结果写出channel

单Reactor-单线程

所有的接收连接,处理数据的相关操作都在一个线程中来完成,性能上有瓶颈

单Reactor-多线程

把比较耗时的数据的编解码运算操作放入线程池中来执行,提升了性能但还不是最好的方式

主从Reactor-多线程

主从多线程,对于服务器来说,接收客户端的连接是比较重要的,因此将这部分操作单独用线程去操作

主从Reactor工作模式

这种模式的基本工作流程为:
1)Reactor主线程MainReactor对象通过select监听客户端连接事件,收到事件后,通过Acceptor处理客户端连接事件。
2)当Acceptor处理完客户端连接事件之后(与客户端建立好Socket连接),MainReactor将连接分配给SubReactor。(即:MainReactor只负责监听客户端连接请求,和客户端建立连接之后将连接交由SubReactor监听后面的IO事件。)
3)SubReactor将连接加入到自己的连接队列进行监听,并创建Handler对各种事件进行处理。
4)当连接上有新事件发生的时候,SubReactor就会调用对应的Handler处理。
5)Handler通过read从连接上读取请求数据,将请求数据分发给Worker线程池进行业务处理。
6)Worker线程池会分配独立线程来完成真正的业务处理,并将处理结果返回给Handler。Handler通过send向客户端发送响应数据。
7)一个MainReactor可以对应多个SubReactor,即一个MainReactor线程可以对应多个SubReactor线程

主从Reactor优势

这种模式的优势如下:
1)MainReactor线程与SubReactor线程的数据交互简单职责明确,MainReactor线程只需要接收新连接,SubReactor线程完成后续的业务处理。
2)MainReactor线程与SubReactor线程的数据交互简单,MainReactor线程只需要把新连接传给SubReactor线程,SubReactor线程无需返回数据。
3)多个SubReactor线程能够应对更高的并发请求。

这种模式的缺点是编程复杂度较高。但是由于其优点明显,在许多项目中被广泛使用,包括Nginx、Memcached、Netty等。这种模式也被叫做服务器的1+M+N线程模式,即使用该模式开发的服务器包含一个(或多个,1只是表示相对较少)连接建立线程+M个IO线程+N个业务处理线程。这是业界成熟的服务器程序设计模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值