Reactor线程模型
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个数等同。
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/13534111.html