主从Reactor多线程
2021-06-26 22:51:03 1 举报
主从Reactor多线程
作者其他创作
大纲/内容
请求
业务处理
建立连接
send
Handler
Reactor子线程
Client
Acceptor
dispatch
说明:1. Reactor主线程MainReactor对象通过select监听,收到事件后通过accept处理连接事件2.建立连接请求,Acceptor通过accept处理连接请求,然后MainReactor将创建好的连接分配给subReactor3.subReactor将连接加入到连接队列进行select监听,监听客户端读写还是其他操作4.有新的事件发生的时候,subReactor调用对应的Handler进行处理,之后就和上面的类似,会分发给对应的worker线程进行处理。5.worker线程池会分配独立的线程完成真正的业务,返回给handler6.send将结果返回给client7. Reactor主线程可以管理多个Reactor子线程1. 优点:父线程与子线程的数据交互简单职责明确,父线程只需要接收新的连接,子线程完成后续的业务处理,父线程与子线程数据交互简单,Reactor主线程只需要把新连接传给子线程,子线程无需返回数据。2. 缺点:编程的复杂性高实例:这种模型在许多项目中广泛的使用,包括nginx主从Reactor多进程模型,Memcached主从多线程,Netty主从多线程模型的支持举个例子:一个酒店,有了一个前台的总管,这时候有个顾客进来后,前台进行接待(accept),接待完成后,交给前台的职员,职员接收到总管的连接后,总管就不想要管了,前台不同的职员就可以针对需要待顾客办理业务,比如入住,带领顾客做一些其他的业务(Handler)等等,这时酒店招了多名业务员(worker线程池),前台接到顾客后通知业务员,业务员带领顾客进行业务一些列的办理。这就相当于一个前台总管(MainReactor)有多个前台工作人员(subReactor)接待多名客人(Client),并且可以交给多个业务员(worker)进行业务处理
Worker线程池
Worker1
Worker线程
Worker线程1
read
accept
处理请求
应用程序
select
Reactor主线程
subReactor
MainReactor
0 条评论
回复 删除
下一页