Clarence Java DocClarence Java Doc
开发总结
Java
数据库
缓存
JVM
Spring
微服务
消息队列
高并发
分布式
高可用
设计模式
场景题
Netty
云原生
算法
系统架构
开发协议
IOT
人工智能
开发总结
Java
数据库
缓存
JVM
Spring
微服务
消息队列
高并发
分布式
高可用
设计模式
场景题
Netty
云原生
算法
系统架构
开发协议
IOT
人工智能
  • 粘包与拆包
  • IO 模型
  • Reactor 模型
  • Websocket
  • SSE(Server-Sent Events)
  • Netty-概述

Reactor 模型

Todo 理解后优化

Reactor 模型是 基于 IO 多路复用的一种事件驱动模型,用于处理高并发网络请求。

1、Reactor 核心原理

  • Reactor(反应器) 负责监听多个 IO 事件,并分发给对应的 Handler(处理器) 进行处理。

  • 适用于 高性能服务器(如 Netty、Tomcat、Redis、Kafka)。

2、Reactor 的三种实现模式

① 单线程 Reactor

  • 特点:单个 Reactor 线程负责监听连接、读写数据,并执行业务逻辑。

  • 缺点:在高并发下容易阻塞。

  • 适用场景:小规模并发,如 GUI 事件驱动。

    示例(伪代码):

    Selector selector = Selector.open();
    while (true) {
        selector.select(); // 监听所有事件
        for (SelectionKey key : selector.selectedKeys()) {
            if (key.isAcceptable()) accept(); // 处理新连接
            if (key.isReadable()) read();     // 读取数据
            if (key.isWritable()) write();   // 发送数据
        }
    }
    

② 多线程 Reactor

  • 特点:

    • Reactor 线程只负责监听事件,并将任务分发给 线程池 处理。

    • 避免单线程阻塞问题,提高吞吐量。

  • 适用场景:一般的高并发服务器(如 Nginx、Netty)。

③ 主从 Reactor(Master-Slave Reactor)

  • 特点:

    • 主 Reactor 负责监听连接请求,并将任务交给 从 Reactor 线程池 处理读写事件。

    • 从 Reactor 负责真正的数据处理,减少主线程负担。

  • 适用场景:超高并发场景(如 Kafka、Redis、Netty)。

    示例(Netty 使用的主从 Reactor):

    EventLoopGroup bossGroup = new NioEventLoopGroup(1); // 处理连接
    EventLoopGroup workerGroup = new NioEventLoopGroup(); // 处理业务
    ServerBootstrap bootstrap = new ServerBootstrap()
        .group(bossGroup, workerGroup)
        .channel(NioServerSocketChannel.class)
        .childHandler(new ChannelInitializer<>() {
            protected void initChannel(SocketChannel ch) {
                ch.pipeline().addLast(new MyHandler()); // 添加业务处理器
            }
        });
    

3、IO 模型与 Reactor 的关系

方案IO 模型适用场景
BIO阻塞 IO低并发
NIO多路复用(Reactor 单线程)一般并发
Netty多路复用(Reactor 多线程)高并发
AIO异步 IO(Reactor 线程池)超高并发

4、IO和Reactor 总结

  • IO 模型 主要描述 数据传输方式(阻塞/非阻塞、同步/异步)。

  • Reactor 模型 是基于 IO 多路复用的事件驱动架构,用于高并发网络服务器。

  • BIO、NIO、AIO 对应不同的并发需求:

    • BIO:简单,但性能差。

    • NIO(Reactor):主流方案,如 Netty、Tomcat。

    • AIO(Proactor):适合超高并发(但 Java AIO 实际应用少)。

Last Updated:
Contributors: hanchen, Clarence
Prev
IO 模型
Next
Websocket