• Netty高性能之Reactor模型


    Reactor模型

    Reactor 是一种模式,它要求主线程只负责监听文件描述符(I/O处理单元)是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元)完成处理。除此之外,主线程不做任何其他实质性的工作。读写数据以及处理客户请求均在工作线程中完成。

    Netty中的Reactor模型

    Netty 中的 Reactor 模型主要由多路复用器 (Acceptor)、事件分发器 (Dispatcher)、事件处理器 (Handler) 组成,可以分为单线程模型,多线程模型和主从Reactor多线程模型三种。

    • Reactor单线程模型

    • Reactor多线程模型

    • 主从Reactor多线程模型

    Reactor 模式可以参考:Reactor模式详解+源码实现

    1. 单线程模型

    所有 I/O 操作都由一个线程完成,即多路复用、事件分发和处理都是在一个 Reactor 线程上完成的,一个 Reactor 线程就是一个 NIO 线程。

    ​Reactor 单线程模型使用的是一个 NIO 线程, NIO 使用的是非阻塞 I/O,所有的 I/O 操作都不会阻塞,所以一个线程可以处理多个 TCP 连接请求。

    对于一些小容量应用场景,可以使用单线程模型,但是对于高负载、大并发的应用却不合适,主要原因如下:

    • 一个 NIO 线程同时处理成百上千的链路,性能上无法支撑。即便 NIO 线程的CPU负荷达到100%,也无法满足海量消息的编码、解码、读取和发送;

    • 当 NIO 线程负载过重之后,处理速度将变慢,这会导致大量客户端连接超时,超时之后往往进行重发,这更加重了 NIO 线程的负载,最终导致大量消息积压和处理超时,NIO 线程会成为系统的性能瓶颈;

    • 可靠性问题。一旦 NIO 线程意外跑飞,或者进入死循环,会导致整个系统通讯模块不可用,不能接收和处理外部信息,造成节点故障。

    2 Reactor多线程模型

    Reactor多线程模型与单线程模型最大区别就是有一组 NIO 线程处理 I/O 操作,它的特点如下:

    • 有一个专门的 NIO 线程用于监听服务端,接收客户端的TCP连接请求;

    • 网络I/O读、写操作等由一个 NIO 线程池负责,线程池可以采用标准的 JDK 线程池实现(Netty 扩展了 JDK 线程池)

  • 相关阅读:
    大厂案例 - 海量分类业务设计的一些思考
    SpringCloud之Gateway整合Sentinel服务降级和限流
    Leetcode 1684. 统计一致字符串的数目
    10.1- 10.3读书笔记
    Vue/Vuex (mutations) 核心概念 方法说明、辅助函数 mapMutations使用方法
    Unity之NetCode多人网络游戏联机对战教程(4)--连接申请ConnectionApproval
    Mysql笔记2
    一起来做个CH347的项目(应用于FPGA、CPLD、MCU)
    2021年下半年信息安全工程师下午真题及答案解析
    集火全屋智能“后装市场”,真正玩得转的没几个
  • 原文地址:https://blog.csdn.net/Linuxhus/article/details/127089648