当前位置: 首页 > news >正文

Reactor模式与Proactor模式理解

一、前言

        Reactor模式与Proactor模式均为高性能网络模式。关于网络模式的演变,可移步前文Reactor模型认识-CSDN博客。其中介绍了为何会出现Reactor模式,个人理解针对IO多路复用的实现方式,如果不用Reactor模式进行开发,写起来更像是面向过程开发,如果业务逻辑复杂有些混乱。后续面向对象思想更加适合各部分解耦,针对该思想可以对其拆解,后续更优雅更规范的Reactor模式就出现了。纯粹个人拙见解....

二、Proactor模式

        Reactor模式相关介绍可移步前文Reactor模型认识-CSDN博客,此处不再过多介绍Reactor模式。下面大概说下Proactor模式。

        Reactor模式作为一种同步网络模式,与其对比肯定相关,对应Proactor模式作为一种异步网络模式。同步与异步两者区别,对于个人理解看,我认为理解异步和同步首先要关注两个主体任务,如何完成这两个主体任务可以分为同步和异步。

        举个例子:我想吃饭,整个流程是我去食堂,然后告诉食堂阿姨我想吃啥,然后食堂阿姨做饭,之后我拿到对应饭菜开吃。

        同步阻塞方式:我到达食堂告诉食堂阿姨我想吃红烧肉请帮我做一份红烧肉,然后在食堂原地等阿姨做红烧肉,阿姨做完后我就开吃。

        同步非阻塞方式:我到达食堂告诉食堂阿姨我想吃红烧肉请帮我做一份红烧肉,然后食堂阿姨开始做饭,过了5秒我又告诉食堂阿姨我想吃红烧肉请帮我做一份红烧肉,过了5秒我又告诉食堂阿姨我想吃红烧肉请帮我做一份红烧肉......问了10次,阿姨做好了,然后我开吃。(阿姨烦死了....)

        异步方式:我到达食堂告诉食堂阿姨我想吃红烧肉请帮我做一份红烧肉,然后我不在原地等也不来回问阿姨,我直接回宿舍打把游戏,然后食堂阿姨以某种方式告诉我红烧肉做好了,然后我回到食堂开吃。

        所以通过上面例子可以理解在网络模式设计的场景下,异步IO对于内核数据准备过程(红烧肉)是不需要等待的,这个等待期间应用程序可以执行其他任务,所以对比同步方式阻塞等待或者非阻塞方式对于CPU的利用率而言更高,因此异步IO方式效率更高。当发起一个异步IO后,程序直接返回,内核开始处理这个IO事件,对应网络就涉及网卡数据的IO,这部分都是由内核自动完成的。如下图:

三、两者对比

对比两者区别:

        Proactor模式他最终处理的事件是已经处理完成的IO事件,而Reactor模式最终处理的还是一个数据已经准备就绪,但是数据需要程序再次触发系统调用取出数据或者写入数据。他面对的是刚准备好的IO事件。整体流程梳理:Proactor模式可以理解为应用层提交一个IO事件,然后内核层会一条龙处理完该事件,将最终的结果再通知给应用层。而Reactor模式可以理解为应用层提交一个IO事件,然后内核层会通知应用层这个IO事件现在可以开始处理了,应用层再提交一个处理IO任务的系统调用,内核层才开始处理该事件。这里的处理流程看Reactor模式就多了一步,这一步在Linux下的开销就包含:提交一次系统调用,内核层与应用层的数据拷贝。而异步IO这两个部分是没有的。所以他的效率要更高。不过两种模式均为事件分发模型,区分两者不能单一的从最终效率差异这个结果出发,而是理解Proactor模式是基于已完成的IO事件,Reactor模式是基于待完成且当前可以开始执行的IO事件。

      更多资料:0voice · GitHub

http://www.lqws.cn/news/496765.html

相关文章:

  • 【c++八股文】Day3:inline与define与constexpr
  • Android手机屏幕分为几种
  • Docker高级管理--Dockerfile镜像制作
  • 【科技公司的管理】
  • 【目标检测】图像处理基础:像素、分辨率与图像格式解析
  • Spring AI框架的实战应用指南
  • vscode 插件
  • 以玄幻小说方式打开深度学习词嵌入算法!! 使用Skip-gram来完成 Word2Vec 词嵌入(Embedding)
  • 显示任何结构的数组对象数据【向上自动滚动】
  • 七层网络模型与电脑通信比喻
  • Typora无限续
  • [创业之路-438]:行业 - 互联网+X技术发展趋势、关键技术简介、行业发展趋势
  • 【第二章:机器学习与神经网络概述】03.类算法理论与实践-(2)朴素贝叶斯分类器
  • 【7】图像变换(上)
  • FPGA基础 -- Verilog 驱动强度(drive strength)与电荷强度(charge strength)
  • 黄晓明考博落榜,本人回应
  • react gsap动画库使用详解之scroll滑动动画
  • 2025年CSS最新高频面试题及核心解析
  • 16.数据聚合
  • LINUX 623 FTP回顾
  • 设计模式精讲 Day 12:代理模式(Proxy Pattern)
  • 手撕 Decoder
  • 将RESP.app的备份数据转码成AnotherRedisDesktopManager的格式
  • react gsap动画库使用详解之text文本动画
  • 山洪灾害智能监测站系统解决方案
  • 通过apache共享文件
  • 渗透测试指南(CSMSF):Windows 与 Linux 系统中的日志与文件痕迹清理
  • XSD是什么,与XML关系
  • D2554探鸽协议,sensor属性,回调
  • 关于 pdd:anti_content参数分析与逆向