• 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 线程池)

  • 相关阅读:
    Java中的读写锁ReentrantReadWriteLock详解,存在一个小缺陷
    3.4.3 终结操作
    iterm2安装记录
    .NET 6 基于IDistributedCache实现Redis与MemoryCache的缓存帮助类
    python基础学习笔记2
    丙二醇二乙酸酯(Propylene Glycol Diacetate)
    已备案域名用国外服务器会不会掉备案?
    网络参考模型与标准协议(二)-TCP/IP对等模型详细介绍
    C++排序问题,关于代码的修改补充
    【每日算法】回溯法求数组组合
  • 原文地址:https://blog.csdn.net/Linuxhus/article/details/127089648