这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
线程的演进过程
单线程-->多线程-->线程池
在进入Netty的学习之前,需要了解下Reactor线程模式,正所谓磨刀不误砍柴工,Reactor模式是高性能网络编程的必知必会模式
Reactor模式
-
事件驱动模型
-
有一个或多个并发输入源
-
有一个Service Handler,有多个Request Handlers(通过Service Handler同步的将输入事件(Event)采用多路复用分发给相应的Request Handler(多个)处理);
Reactor模式是一种设计模式,也成为反应器模式,由3个角色组成
- Acceptor:处理客户端新连接,并分派请求到处理器链中
- Dispatch:将I/O事件分派给对应的Handler
- Handle:执行非阻塞读/写 任务
Reachor三种线程模式
单Reactor单线程
Reactor和handler都在同一个线程中,原理:
服务端通过一个线程多路复用实现所有的I/O操作(连接、读、写等),而单线程的缺点就是有多个客户端连接时,可能出现阻塞情况,需要一个一个排队处理,也无法发挥多核CPU的性能
单Reactor多线程
优点:
- 多线程可以充分利用多核CPU的处理能力
- 采用线程池复用线程,减少创建和销毁线程带来的性能开销 不足:
- reactor处理所有事件的监听和响应,在单线程运行,高并发场景下容易出现性能瓶颈
- 多线程数据共享和访问比较复杂
主从Reactor多线程
- 主线程与子线程的数据交互简单职责明确,主线程只需要接收新连接,子线程完成后续的业务处理
- 可以通过扩展多个Reactor子线程的方式来减小单个子线程的压力,提高并发处理能力
小结
通过对Reactor三种线程模式的对比,很明显的发现,主从Reactor多线程有明显的优势,而Netty就是在主从Reactor多线程模型的基础上进行了一定的改进。