netty - 线程模型 reactor

Posted better_hui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了netty - 线程模型 reactor相关的知识,希望对你有一定的参考价值。

目录

线程模型

1、传统IO服务模型

2、Reactor模式

reactor

三种模式:

总结

netty模型

执行流程简述


线程模型

1、传统IO服务模型

阻塞的IO模式获取输入数据,每个链接需要独立的线程完成数据传输及处理

当并发数较大时,创建大量线程,占用系统资源;线程创建后如无数据读写,将被阻塞

 

2、Reactor模式

reactor

针对传统的IO模型的两个缺点,解决方案:

a、基于IO多路复用模型:多个连接共用一个阻塞对象。应用程序只需要在一个阻塞对象上等待,无需阻塞所有对象

b、基于线程池复用线程资源:不再为每个连接创建线程,将连接完成后的业务处理任务分配给线程池处理

IO多路复用结合线程池 就是reactor模型的基本思想 , 其核心组成:

 a、reactor : 在一个单独线程中运行,负责监听和分发事件,如上图中servicehandler(EventDispatch)

b、handlers: 具体执行IO事件

三种模式:

1、单reactor单线程

 

reactor/handler , 均运行在一个线程里.

优点: 没有线程竞争

缺点:扛不住高并发 、可靠性问题,线程以外终止或者进入死循环

应用:客户连接数量有限;业务处理非常快速

2、单reactor多线程

 

针对单线程并发性的问题,衍生出来了单reactor多线程模型。

1、单reactor负责监听、建立连接、读写IO

2、业务逻辑线程池负责处理具体的IO读写及业务逻辑

优点:充分利用计算机多核的性能,能够抗住相对较高的并发

缺点:单reactor,在超高并发的场景中,会成为瓶颈。因为reactor负责 监听 、连接、读写IO 三个工作,这块是单线程串行的。

3、主从reactor多线程

 

为了应对超高的并发,我们在reactor单线程运行的的基础上继续优化,拆分reactor的工作:

1、主reactor 负责监听和连接 , 这两步工作是非常快速的

2、从reactor负责读写IO数据

3、业务逻辑线程池负责处理业务逻辑

总结

单reactor单线程 :小饭馆 , 前台、厨师、服务员是一个人,从点餐、做饭、端饭上桌是串行的

单reactor多线程: 大一些的饭馆,前台、厨师是一个人,服务员是一群人 , 上饭的速度快了一些

主从reactor多线程:五星级饭店:前台一个人,厨师一群人、服务员是一群人,上饭的速度嗖嗖的

优点:

1、响应快,不必所有线程均阻塞等待,而是共用一个阻塞对象

2、扩展性能好,可以扩展从reactor的数量,充分利用cpu资源

3、复用性好,reactor模型本身与具体事件处理逻辑无关,具有很高的复用性。

netty模型

netty的线程模型是基于主从reactor多线程模式的,并在此基础上做了一定程度上的优化:

1、BossGroup线程池维护主Selector , 只关注accecpt

2、当接收到accept事件后,获得对应的SocketChannel,封装成NiosocketChannel 注册到Worker线程循环

3、worker线程监听到自己感兴趣的时间后,交由handler处理

 

netty的线程模型中主从reactor都是在线程池里的,这是相对reactor的改进

 

执行流程简述

 

1、netty抽象出两个线程池:BossGroup负责监听和建立连接 ;WorkerGroup 负责网络IO的读写

2、BossGroup 和 WorkerGroup 类型都是NioEventLoopGroup , 相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环都是NioEventLoop

3、NioEventLoop表示一个selector , 用户监听绑定在骑上的socket网络通讯

4、每一个Boos NioEventLoop循环执行3步:

a、轮询accept事件

b、建立连接,生成NioSocketChannel,并注册到workerGroup上

c、处理任务队列中的任务,即RunAllTasks

5、每个Worker NioEventLoop循环执行3步:

a、轮询读写时间

b、处理IO时间,在对应的NioSocketChannel上处理

c、处理任务队列的任务,即RunAllTasks

以上是关于netty - 线程模型 reactor的主要内容,如果未能解决你的问题,请参考以下文章

netty - 线程模型 reactor

BIO/NIO 线程模型以及高性能通讯框架 Netty Reactor 模型初探

分布式理论,架构设计 Netty

分布式理论,架构设计 Netty

填坑Reactor模型和Netty线程模型

6.netty线程模型-Reactor