传统阻塞I/O服务模型
工作图
模型特点
问题分析
当并发数很大, 就会创建大量的线程, 占用很大系统资源
连接创建后, 如果当前线程暂时没有数据可读, 该线程会阻塞在read操作, 造成线程资源浪费
Reactor模式
针对传统阻塞I/O服务模型的两个缺点, 提出了解决方案:
说明:
基本原理示意图
核心组成部分
单Reactor单线程
工作原理示意图:
方案说明
优缺点
单Reactor多线程
工作原理示意图
方案说明
优缺点
主从Reactor多线程(Netty的模型也是由此模型演变而来的)
工作原理示意图
方案说明
优缺点
Netty 主要基于主从Reactor多线程模型做了一定的改进, 其中主从Reactor多线程模型有多个Reactor
工作原理示意图
方案说明
Netty抽象出两组线程池BossGroup专门负责接收客户端的连接, WorkGroup 专门负责网络的读写。
BossGroup 和 WorkerGroup 类型都是NioEventLoopGroup
NioEventLoopGroup 相当于一个时间循环组, 这个组中含有多个事件循环, 每一个事件循环是NioEventLoop
NioEventLoop 表示一个不断循环的执行处理任务的线程, 每个NioEventLoop 都有一个 selector, 用于监听绑定在其上的socket网路通讯
NioEventLoopGroup 可以有多个线程, 即可以含有多个NioEventLoop
每个Boss NioEventLoop循环执行的步骤有3步:
每个 Worker NIOEventLoop 循环执行的步骤:
每个 Worker NIOEventLoop 处理业务时, 会使用pipeline(管道), 其中包含了channel, 即通过pipeline 可以获取到对应的通道, 管道中维护了很多的处理器。
原文:https://www.cnblogs.com/ronnieyuan/p/12015977.html