初识Netty系列——Reactor模式

227 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

线程的演进过程

单线程-->多线程-->线程池

在进入Netty的学习之前,需要了解下Reactor线程模式,正所谓磨刀不误砍柴工,Reactor模式是高性能网络编程的必知必会模式

Reactor模式

  • 事件驱动模型

  • 有一个或多个并发输入源

  • 有一个Service Handler,有多个Request Handlers(通过Service Handler同步的将输入事件(Event)采用多路复用分发给相应的Request Handler(多个)处理);

Reactor模式是一种设计模式,也成为反应器模式,由3个角色组成

  • Acceptor:处理客户端新连接,并分派请求到处理器链中
  • Dispatch:将I/O事件分派给对应的Handler
  • Handle:执行非阻塞读/写 任务

image.png

Reachor三种线程模式

单Reactor单线程

Reactor和handler都在同一个线程中,原理: 服务端通过一个线程多路复用实现所有的I/O操作(连接、读、写等),而单线程的缺点就是有多个客户端连接时,可能出现阻塞情况,需要一个一个排队处理,也无法发挥多核CPU的性能 image.png

单Reactor多线程

优点:

  • 多线程可以充分利用多核CPU的处理能力
  • 采用线程池复用线程,减少创建和销毁线程带来的性能开销 不足:
  • reactor处理所有事件的监听和响应,在单线程运行,高并发场景下容易出现性能瓶颈
  • 多线程数据共享和访问比较复杂 image.png

主从Reactor多线程

  • 主线程与子线程的数据交互简单职责明确,主线程只需要接收新连接,子线程完成后续的业务处理
  • 可以通过扩展多个Reactor子线程的方式来减小单个子线程的压力,提高并发处理能力 image.png

小结

通过对Reactor三种线程模式的对比,很明显的发现,主从Reactor多线程有明显的优势,而Netty就是在主从Reactor多线程模型的基础上进行了一定的改进。