Reactor模式(Netty七)

12 篇文章 0 订阅

1、Reactor基于I/O复用模型:多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接,当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。基于线程池复用线程资源:不必再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。

2.单Reactor多线程模型:

①Reactor对象通过select监控客户端请求事件,收到事件后,通过dispatch进行分发②如果建立连接请求,则由acceptor通过accept处理连接请求,然后创建一个Handler对象处理完成连接后的各种事件③如果不是连接请求,则由reactor分发调用连接对应的handler来处理④handler只负责响应事件,不做具体的业务处理,通过read读取数据后,会分发给后面的worker线程池的某个线程处理业务⑤worker线程池会分配独立线程完成真正的业务,并将结果返回给handler⑥handler收到响应后,通过send将结果返回给client.

3.主从Reactor多线程:

①Reactor主线程MainReactor对象通过select监听连接事件,收到事件后,通过acceptor处理连接事件②当acceptor处理连接事件后,mainReactor将连接分配给subreactor③subreactor将连接加入到连接队列进行监听,并创建handler进行各种事件处理④当有新事件发生时,subreactor就会调用对应的handler处理⑤handler通过read读取数据,分发给后面的worker线程处理⑥worker线程池分配独立的worker线程进行业务处理,并返回结果⑦handler收到响应的结果后,在通过send将结果返回给client⑧reactor主线程可以对应多个reactor子线程,即mainReactor可以关联多个subReactor.

4.Netty模型

①Netty抽象出两组线程池BossGroup专门负责接收客户端的连接,WorkerGroup专门负责网络的读写②BossGroup和WOK而Group类型都是NioEventLoopGroup③NioEventLoopGroup相当于一个事件循环组,这个组中含有多个事件循环,每个事件循环是NioEventLoop④NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个selector,用于监听绑定在其上的socket的网络通讯⑤NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop⑥每个BossNioEventLoop循环执行的步骤有三部一轮询accept事件二处理accept事件,与client建立连接,生成NioSocketChannel,并将其注册到某个Worker NIOEventLoop上的selector三处理任务队列的任务,即runAllTasks⑦每个Worker NIOEventLoop循环执行的步骤一轮询read,write事件二处理i/o事件,即read,writer事件,在对应的NioSocketChannel处理三处理任务队列的任务,即runAllTasks

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值