• 【博学谷学习记录】超强总结,用心分享|架构师-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个业务处理线程。这是业界成熟的服务器程序设计模式。

  • 相关阅读:
    DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用
    ARM day2
    民安智库(第三方满意度调研公司)物业企业满意度调查指标的选取原则
    文件、异常、模块
    监控易机房运维大屏:打造高效机房管理的新标杆
    户外led显示屏中的裸眼3D效果是怎么做出来的?
    数字孪生在工厂领域的应用和优势
    【分数限制下,专科学子将何去何从】
    Flink学习24:窗口的分配器
    C# 定时器定时不准确问题
  • 原文地址:https://blog.csdn.net/qq_22043649/article/details/126457696