Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用

本文主要是介绍Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于Reactor模式和Proactor模式原理性的详细介绍可以参见:
如何深刻理解Reactor和Proactor? - 小林coding的回答 - 知乎

不管是Reactor模式还是Proactor模式都是事件驱动模式,采用了面向对象的思想,如果是IO复用的方式实现高并发是基于面向过程的思想。

Reactor模式是一种同步IO模式,什么是同步IO操作什么是异步IO操作可以参见UNP 卷1 P126:

  • 同步IO操作导致请求进程阻塞,直到IO操作完成。对于不同类型的IO模型(Linux下有5种,可以看我的另一篇博客:Unix的五种IO模型),请求进程阻塞的阶段可能不一定一致,但是一定全部或者是部分阶段有阻塞。
  • 异步IO操作不导致请求进程阻塞。事实上对于需要IO的进程,异步IO操作只需要把请求进程的缓冲区地址告诉内核,IO的操作完全由内核完成,在内核进行IO操作的时候,请求进程可以继续执行其他代码。

Reactor 模式也叫 Dispatcher 模式,即 I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。
Reactor 模式的工作流程:Reactor 模式的工作流程

原理:主线程只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程,除此之外,主线程不做其他任何的工作,读写数据,接受新的连接,以及处理客户请求均在工作线程完成。

Proactor模式是一种异步IO模式,
原理: proactor模式所有的IO操作都是由主线程以及内核完成,工作线程只负责业务逻辑。
Proactor 模式的工作流程

采用reactor模拟proactor模式:
原理:主线程执行数据读写操作,读写完成后主线程向工作线程通知这一“完成事件”,那么从工作线程的角度来看,工作线程就获得了数据读写的结果,只要对这些读写结果做逻辑处理(即业务逻辑)
同步 I/O 模拟 Proactor 模式的工作流程
参考资料:
游双 Linux高性能服务器编程

这篇关于Reactor模式,Proactor模式以及采用Reator模拟Proactor模式详解,以及他们在网络IO处理中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309312

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚