基本概念
Reactor:把IO事件分配给对应的handler处理
Acceptor:处理客户端连接事件
Handler:处理非阻塞的任务
梳理下基于主从Reactor多线程模型的事件处理过程:
Reactor主线程对象通过select监听连接事件,通过Acceptor处理连接事件
当Acceptor处理连接事件后,主reactor将连接分配给从Reactor
从Reactor将连接加入到连接队列进行监听,并创建handler进行各种事件处理
当有新事件发生时,从reactor就会对用对应的handler处理
handler读取数据后,分发给后面的worker线程处理
worker线程池分配独立的worker线程进行处理并返回结果
handler收到结果后再讲结果返回给客户端
如下图所示
可以看到,在主从Reactor多线程模型中,父线程与子线程之间数据交互简单、责任明确,父线程只需接收新连接,后续的处理交给子线程完成即可;主从Reactor多线程模型中,Reactor线程拆分为mainReactor和subReactor两个部分,mainReactor只处理连接事件,读写事件交给subReactor来处理。业务逻辑还是由线程池来处理,mainRactor只处理连接事件,用一个线程来处理就好。处理读写事件的subReactor个数一般和CPU数量相等,一个subReactor对应一个线程,业务逻辑由线程池处理