Linux - 第24节 - Linux高级IO(三)

news2024/12/23 9:43:09

1.Reactor模式

1.1.Reactor模式的定义

Reactor反应器模式,也叫做分发者模式或通知者模式,是一种将就绪事件派发给对应服务处理程序的事件设计模式。

1.2.Reactor模式的角色构成

Reactor主要由以下五个角色构成:

角色解释
Handle(句柄)用于标识不同的事件,本质就是一个文件描述符。
Sychronous Event Demultiplexer(同步事件分离器)本质就是一个系统调用,用于等待事件的发生。对于Linux来说,同步事件分离器指的就是I/O多路复用,比如select、poll、epoll等。
Event Handler(事件处理器)由多个回调方法构成,这些回调方法构成了与应用相关的对于某个事件的处理反馈。
Concrete Event Handler(具体事件处理器)事件处理器中各个回调方法的具体实现。
Initiation Dispatcher(初始分发器)初始分发器实际上就是Reactor角色,初始分发器会通过同步事件分离器来等待事件的发生,当对应事件就绪时就调用事件处理器,最后调用对应的回调方法来处理这个事件。

1.3.Reactor模式的工作流程

Reactor模式的工作流程如下:

1.当应用向初始分发器注册具体事件处理器时,应用会标识出该事件处理器希望初始分发器在某个事件发生时向其通知,该事件与Handle关联。
2.初始分发器会要求每个事件处理器向其传递内部的Handle,该Handle向操作系统标识了事件处理器。
3.当所有的事件处理器注册完毕后,应用会启动初始分发器的事件循环,这时初始分发器会将每个事件处理器的Handle合并起来,并使用同步事件分离器等待这些事件的发生。
4.当某个事件处理器的Handle变为Ready状态时,同步事件分离器会通知初始分发器。
5.初始分发器会将Ready状态的Handle作为key,来寻找其对应的事件处理器。
6.初始分发器会调用其对应事件处理器当中对应的回调方法来响应该事件。


2.epoll ET服务器(Reactor模式)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LVS-DR负载群集的优势和部署实例(我们都会在各自喜欢的事情里变得可爱)

文章目录 一、DR模式数据包流向分析二、DR模式的特点三、DR模式中需要解决的问题问题1解决方式 问题2解决方式 四、LVS-DR部署实例1.配置NFS共享存储器2.配置节点web服务(两台的配置相同)3.配置LVS负载调度器 一、DR模式数据包流向分析 1.Client 客户端…

【Hello MySQL】数据库基础

目录 1. 什么是数据库 2. 主流数据库 3. MySQL的基本使用 3.1 MySQL安装 3.2 连接 MySQL 服务器 3.3 退出 MySQL 服务器 3.4 服务器,数据库,表关系 3.5 MySQL的配置 4. MySQL架构 5. SQL分类 6. 存储引擎 6.1 存储引擎 6.2 查看存储引擎 6.3 存储引擎对…

Vue.js 中的 $nextTick 方法是什么?有什么作用?

Vue.js 中的 $nextTick 方法是什么? 在 Vue.js 中,$nextTick 方法是一个非常有用的工具,它可以让我们在下一个 DOM 更新周期之前执行回调函数。这个方法可以用于很多场景,比如在 Vue 实例数据改变之后,立即获取更新后…

肠道重要菌属——Dorea菌,减肥过敏要重视它?

谷禾健康 认识 Dorea菌 Dorea菌属于厚壁菌门毛螺菌科,广泛存在于人体肠道内,谷禾数据显示该菌在人群的检出率超89%。该菌最早也是从人体粪便中分离出来。 “Dorea” 目前没有一个确定的译名,Dorea是以法国微生物学家 Joel Dor 的名字命名&…

进入流程化管理不再是奢望,开源快速开发框架助你梦想成真!

在数字化进程快速发展的今天,流程化管理是企业做强做大的重要一步。如何实现流程化管理?如何实现数字化发展目标?这些问题都是值得每一个企业深思的重要课题。开源快速开发框架是一种快速帮助企业提质增效的平台软件,可以让每一个…

使用gcc展示完整的编译过程(gcc预处理模式、编译模式、汇编模式、连接模式)

最近在了解 clang/llvm 的时候突然发现一件事:gcc是一个工具集合,包含了或者调用将程序源代码转换成可执行程序文件的所有工具,而不只是简单的编译器。这帮助我对“编译器”有了更深刻的理解,所以写下本文作为记录。 关于“编译器…

如何用Web服务组件IIS免费搭建站点,并实现外网远程访问?

作为一名程序猿,经常会有搭建网站的需求,或被朋友要求帮忙着搭建网站,但是如果将网站建设在个人电脑或公司的服务器上,面临的问题是,没有公网IP或屏蔽了外网的80端口,在外网环境下就无法直接内网的网站&…

chatgpt赋能python:将一行数变成列——Python简单实现

将一行数变成列——Python简单实现 在数据处理时,我们常常会遇到将一行的数据转换成列的情况,例如将多个数据在Excel表格中拆分为不同的列。这时候,Python可以帮助我们快速实现这个功能。 什么是Python? Python是一种高级&…

linux ubi文件系统加载失败“too large reserved_peds”

今天要升级linux根文件系统ubi,结果简单打包工作,就有一个始终不正确,花了不少时间,总算搞明白了。 我使用了两个打包脚本,脚本1是一个整个系统打包脚本,脚本2是一个专门给文件系统打包的脚本。 脚本1的部…

Vue框架和Axios实战:音乐播放器项目-歌手信息列表

Vue框架和Axios实战:音乐播放器项目-歌手信息列表 歌手信息一栏用于展示当前比较火热的歌手信息列表,首先我们创建静态热门歌手信息模型组件SingerList.vue,主要用于存放公共歌手列表信息,代码如下: 接着将歌手信息列表…

【前端 - HTML】第 5 课 - 表格标签

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、基本用法 3、表格结构标签 4、合并单元格 5、总结 1、缘起 在 HTML 中的表格标签 用于创建和展示数据表格。通过…

CAM, Grad-CAM, Grad-CAM++可视化CNN方式的代码实现和对比

当使用神经网络时,我们可以通过它的准确性来评估模型的性能,但是当涉及到计算机视觉问题时,不仅要有最好的准确性,还要有可解释性和对哪些特征/数据点有助于做出决策的理解。模型专注于正确的特征比模型的准确性更重要。 理解CNN…

【数据结构】排序篇

排序 一、排序的概念和应用1.1、排序的概念1.2、排序的应用1.3、常见的排序算法 二、插入排序2.1、直接插入排序2.2、希尔排序3.1.直接选择排序3.2、堆排序 四、交换排序4.1、冒泡排序4.2、快速排序4.2.1、hoare版本4.2.2、挖坑法4.2.3、前后指针版本4.2.4、快排非递归&#xf…

图结构的原理

引言 胡图图:“我成为电脑砖家(人们都在我吧上评论电脑配置).,按理说我应该开一家图图计算机研究科技公司…”! 于小美:“没错,图图应该开一家公司 来扩展你的专业知识” 何壮壮:“厉害是厉害 ,要不要大哥来帮帮你(至于钱,好说:月薪2万)…” 图图:“你狮子大开口! ,那你还是当…

『赠书活动--第三期』清华社赞助 | 《Python系列丛书》

『赠书活动 | 第三期』 本期书籍:《Python系列丛书》 Python从入门到精通(微课精编版) PyTorch深度学习简明实战 Django Web开发实例精解 Python分布式机器学习 Python Web深度学习 618,清华社 IT BOOK 多得图书活动开始啦!活动…

Vue.js 中的 keep-alive 组件使用详解

Vue.js 中的 keep-alive 组件 在 Vue.js 中,keep-alive 组件是一个非常有用的组件,它可以帮助我们优化页面性能。在本文中,我们将介绍 keep-alive 组件是什么,如何使用它以及它的作用。 keep-alive 组件是什么? keep…

C plus plus ——【模板应用】

系列文章目录 C plus plus ——【模板应用】 文章目录 系列文章目录前言一、函数模板1.1、函数模板的定义1.2、函数模板的作用1.3、重载函数模板 二、类模板2.1、类模板的定义与声明2.2、简单类模板2.3、默认模板参数2.4、为具体类型的参数提供默认值 三、总结 前言 模板是C语…

Selenium Python教程第4章

4. 查找元素 在一个页面中有很多不同的策略可以定位一个元素。在你的项目中, 你可以选择最合适的方法去查找元素。Selenium提供了下列的方法给你: find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_par…

自己制作智能语音机器人(基于jetson nano)

1 简介 如上图,主要采用jetson上编写python代码实现,支持离线语音唤醒、在线语音识别、大模型智能文档、在线语音合成。 所需硬件如下: jetson nano:linux科大讯飞麦克风硬件:AIUI R818麦克阵列开发套件6麦阵列&#…

华为全栈自主数据库GaussDB正式面向全球服务

一、前言 在6月7日举行的华为全球智慧金融峰会2023上,华为发布新一代分布式数据库GaussDB,并正式向全球客户提供服务。据介绍,GaussDB实现了核心代码100%自主研发,是国内当前唯一做到软硬协同、全栈自主的国产数据库。 可谓是里…