Reactor线程模型

前文:5种常用IO模型/IO多路复用

React线程模型是一种事件驱动模型

    Reactor线程模型=Reactor(IO多路复用)+线程池

   Reactor主要用来负责监听和分配事件,线程池负责处理事件

  根据Reactor的数量和线程池的数量,又可以将Reactor分为三种模型

  

单Reactor单线程模型 (固定大小为1的线程池)

           

 

流程:

  React通过select监控连接事件,收到事件以后通过dispatch进行分发

  如果是建立连接事件,就通过accept接收连接,接着创建handle进行处理后续事件

  如果不是建立连接事件,就直接分发调用handler来响应

  handle完成read-业务处理-send的业务处理

问题:

  高并发的情况下,cpu负荷达到100%以后无法处理更多的请求,另外负荷过程会导致处理超时,大量客户端连接超时重复,进一步加剧React线程模型负荷,导致大量消息积压和处理超时,成为系统的性能瓶颈

  

单Reactor多线程模型

 

流程:

  Reactor通过select监控连接事件,收到事件以后通过dispatch进行分发

  如果是建立连接事件,就通过accept接收连接,接着创建handle进行处理后续事件

  如果不是建立连接事件,就直接分发调用handler来响应

    handler此时只负责响应事件,不再做具体的业务处理,read数据以后,分发给具体的worker线程池进行处理

    worker线程池分配独立的线程完成真正的业务处理,并把响应结果返回给handler

            handler收到响应结果再send给client

 

多Reactor多线程模型 (一般是主从2个Reactor):

  多Reactor线程模型在原先的基础上增设MainReactor和SubReactor

  MainReactor仅负责监听server socket,用来处理网络IO连接建立操作,将建立的socketChannel指定注册给SubReactor

  SubReactor主要做和建立起来的socket做数据交互和事件业务处理操作。SubReactor个数上可与CPU个数等同。

 

posted @ 2020-08-20 11:36  LeeJuly  阅读(335)  评论(0编辑  收藏  举报