reactor模型_听说你还没上过Reactor模式,那还等神马,客官来呀!内附代码讲解视频。...

d36663f0a51ca0517b8237f44172531e.png

大家好,从今天开始,我将定期写一些知识分享,把自己在前后端学习过程中觉得有用的知识点分享出来,大家可以关注学习,也欢迎大家和我一起讨论,有问题也可以问我,一定耐心解答,我的想法就是帮助别人不要再走自己踩过的坑

Reactor代码详解:

想要看代码的可以去Csdn查看:https://blog.csdn.net/Dachao0707/article/details/107584661

知乎视频​www.zhihu.com

文章目录

      • Reactor模式
      • 为什么我们要学reactor
      • Reactor模式简介
      • Reactor来也
        • 1、单Reactor单线程模型
        • 2、单reactor多线程模型
        • 3、多reactor多线程模式
听说你还没上过Reactor模式,那还等神马,客官来呀!_Dachao0707的博客-CSDN博客​blog.csdn.net
26dff0941fa5de51a6722c9fa8f316f1.png

Reactor模式

reactor模式就是反应堆模式,这个模式非常重要,无论是开发还是面试,都是非常有用的,这种模式在平常工作中经常能看到,很多大名鼎鼎的开源组件也会使用,它是高并发的一种网络架构模式,仔细学习以后,你会发现高并发也不过如此。

为什么我们要学reactor

当然是他骚呀!哈哈哈,回归正题。

不知道大家有没有一种感觉,平常在阅读别人的代码或者一些好的框架时,经常会看不懂,为什么会看不懂呢?是因为你不知道别人用了什么样的设计模式,或者说别人在组织者写代码的时候到底是怎么设计的,**那么如果你懂了这些模式,你就可以根据设计思想大概猜测接下来该怎么写,所以阅读代码的过程只不过是在验证你的猜想,**而且只要你的思路对了,你会发现完全吻合。就是这么简单,这么丝滑。

Reactor模式是高性能网络编程中必知必会的一种模式。

Reactor模式简介

Reactor中文名是反应堆模式,别的地方可能有别的叫法,但是我就喜欢叫它反应堆应为这个有助于我们后面代码的理解。还记得我们刚学网络通信的时候嘛?我们从最基础的服务器开始,

48c158804b1dc6076cdb53a5a5fef147.png

基础网络通信就是这种,主线程中开启监听后,只能在这里等着处理和客户端之间保持这种一读一写的连接。

再后来我们学习了IO多路复用技术,也就是select、epoll、poll技术,我们可以同时处理多个连接,但是这种模式每一个客户端都要维持一个与服务器的连接,那么对于服务端如果有很多的IO连接,那么绝对是一个巨大的开销。

解决方案:

我们可以使用线程池的方法来处理读写服务,我们每当有一个连接过来,就把它封装成一个任务丢到线程池中处理,这么做有很明显的弊端:

同步阻塞IO,读写阻塞,线程等待时间过长

在制定线程策略的时候,只能根据CPU的数目来限定可用线程资源,不能根据连接并发数目来制定,也就是连接有限制。否则很难保证对客户端请求的高效和公平。

多线程之间的上下文切换,造成线程使用效率并不高,并且不易扩展

状态数据以及其他需要保持一致的数据,需要采用并发同步控制

Reactor来也

1、单Reactor单线程模型

也就是说一个单线程就能够实现高并发,是不是很牛逼。Reactor的核心思想就是它有一个反应堆,这个反应堆可以继续往里面加东西,然后主线程就是不断从反应堆里面取出已经反应的东西,处理它们。

2、单reactor多线程模型

一句话总结就是,一个反应堆,负责处理反应,把反应封装成任务交给线程池去处理读写,这样的效率适合一些每一个连接业务比较复杂的情况,把处理连接的耗时操作在分出来,提升反应堆的处理速度。

3、多reactor多线程模式

第三种模型比起第二种模型,是将Reactor分成两部分,

mainReactor负责监听server socket,用来处理新连接的建立,将建立的socketChannel指定注册给subReactor。

subReactor维护自己的selector, 基于mainReactor 注册的socketChannel多路分离IO读写事件,读写网 络数据,对业务处理的功能,另其扔给worker线程池来完成。

总结

Reactor模式可以支撑起百万计的并发,再加上多线程,它是非常优秀的网络服务器架构基础模型,当然可能还有更牛逼的优化手段,我的能力就在这里了。

码字不易,帮到你的话,点个赞呗,多谢,持续更新,欢迎提问

想要给大家录个代码讲解的小视频,无奈我暂时不会上传,希望大家有问题多多提问。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值