首页 > 其他 > 详细

Reactor模式

时间:2019-12-02 00:30:35      阅读:895      评论:0      收藏:0      [点我收藏+]

Reactor有三种模式:

  1. 单reactor单线程
  2. 单 reactor多线程
  3. 主从reactor

  

1. 单reactor单线程工作原理图

技术分享图片

 

dispatch与handler在同一个线程中处理。。。  redis就是采用这种模式

 

2. 单reactor多线程工作原理图

技术分享图片

 

(1) reactor对象通过select监控客户端请求事件,收到事件后,通过dispatch进行分发

(2)如果建立连接请求,则由Acceptor通过accept处理连接请求,然后创建一个Handler对象处理完成连接后的各种事件

(3)如果不是连接请求,则由reactor分发调用连接对应的Handler来处理

(4)Handler只负责响应事件,不做具体的业务处理, 通过read读取数据后分发给后面的work线程池中的某个线程。

(5)work线程池会分配一个独立的线程完成真正的业务 ,并将处理完的业务结果返回给Handler

  (6)  Handler收到响应结果后,通过send将结果返回给client

 

优点:

(1) 可以充分利用多核cpu的处理能力

(2) 多线程数据共享和访问比较复杂 ,reactor处理了所有的事件监听和响应,而且是在单线程中运行,在高并发场景容易出现性能瓶颈

 

3. 主从reactor多线程工作原理图

技术分享图片

 

(1)Reactor主线程MainReactor对象通过select监听连接事件,收到连接事件后,通过Acceptor处理连接事件

(2)当Acceptor处理连接事件后,MainReactor将连接分配给SubReactor, 

  (3) SubReactor将连接加入到连接监听队列进行监听,并创建Handler进行各种事件处理

   (4) 当有新的事件发生时, subreactor就会调用对应的handler处理,

 (5)handler通过read读取数据后,分发给后面的worker线程处理

 (6)worker线程池会分配独立的worker线程进行业务处理,并返回结果

 (7)handler收到响应结果后,再通过send将结果返回给client

 注意: reactor主线程可以对应多个reactor子线程,即一个MainReactor可以管理多个SubReactor

技术分享图片

优点:

1. 父线程与子线程的数据交互简单,职责明确,父线程只需要接收新的连接,子线程完成后继的业务处理

2. MainReactor主线程只需要把新的连接传给子线程SubReactor,子线程无需要返回数据 

案例: nginx,netty,memcache

 

 

 

Reactor模式

原文:https://www.cnblogs.com/z-qinfeng/p/11968148.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!