Reactor线程模型

一 传统阻塞线程模型

在这里插入图片描述

第一:服务器端有一个Acceptor线程接收客户端请求
第二:Acceptor接收到每一个客户端请求后,为每一个线程分配一个线程处理客户端请求

缺点:
第一:当数据量很大或者客户端很多的时候,就会创建大量的线程对象
第二:连接建立后,没有数据可读,会一直处于阻塞状态

二 Reactor单线程模型

在这里插入图片描述

第一:Reactor对象通过Selector(多路复用器)监控客户端请求事件
第二: 收到事件后,进行分发
第三:如果是建立连接的事件则交给Acceptor,通过accept处理连接请求,然后创建一个Handler对象处理连接完成后的后续业务处理;如果不是建立连接则直接调用Handler来处理

缺点:
单个线程要负责连接、读写请求,如果客户端连接数量太多,则会无法发挥CPU多核的性能,容易造成性能瓶颈

三 Reactor多线程模型

在这里插入图片描述

第一:Reactor线程通过Selector多路复用器监听客户端事件
第二:收到事件后,进行转发
第三:如果是建立连接的请求,则通过Acceptor线程的accept处理连接,然后创建一个Handler对象处理后续的请求;如果不是连接请求则由Reactor分发,调用Handler来处理
第四:Handler不会自己处理具体的读写请求,而是直接提交给一个线程池去执行,然后就可以返回了,然后由线程池获取一个线程执行这个请求

优点:
可以充分利用多核CPU处理能力
缺点:
Reactor要处理所有的事件监听和响应,是单线程运行,并发量大的时候,容易出现性能瓶颈

四 主从Reactor多线程模型

在这里插入图片描述

第一:MainReactor通过通过多路复用器,监听客户端连接请求,然后调用Acceptor的accept处理连接请求

第二:Acceptor处理连接事件,然后Main Reactor将连接分配给SubReactor
第三:SubReactor将连接加入到连接队列并监听,然后创建Handler处理各种事件
第四:Handler不处理具体的业务逻辑,而是将请求或者事件提交给线程池去处理
第五:线程池分配线程处理业务逻辑,并返回结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值