Reactor设计模式
一、Reactor设计模式
1、什么是Reactor设计模式?
Reactor模式是高性能I/O设计中,常用的设计模式。其中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上,一旦有I/O事件到来或是准备就绪,多路复用器将返回并将相应I/O事件分发到对应的处理器中。Reactor是一种事件驱动机制,和普通函数调用不同的是应用程序不是主动的调用某个API来完成处理,恰恰相反的是Reactor逆置了事件处理流程,应用程序需提供相应的接口并注册到Reactor上,如果有相应的事件发生,Reactor将主动调用应用程序注册的接口(回调函数)。
2、Reactor模式框架
Reactor模式由下面的几个组件组成:事件源、Reactor框架、多路复用机制和事件处理程序,Reactor模型UML,如下图:

- 事件源:代表操作系统管理的资源(如:Linux文件描述符),例如:I/O事件,信号,定时器。
- Reactor框架:事件管理者,提供事件注册、注销事件、事件循环以及当事件处于就绪状态,调用事件注册的回调等能力。对应到libevent中,就是event_base结构体。
- 多路复用机制: 系统提供select、poll、epoll等I/O多路复用机制,libevent使用结构体eventop进行了封装,以统一的接口来支持这些I/O多路复用机制,达到了对外隐藏底层系统机制的目的。
- 事件处理程序:负责事件的处理,对应到libevent中,就是event结构体。
3、Reactor模式的优点
响应快:不必为单个同步事件所阻塞,虽然Reactor本身依然是同步的(同步等待事件到来)
编程相对简单:可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销
可扩展性:可以方便的通过增加Reactor实例个数来充分利用CPU资源
可复用性:reactor框架本身与具体事件处理逻辑无关,具有很高的复用性
相关文章:
Reactor设计模式
一、Reactor设计模式 1、什么是Reactor设计模式? Reactor模式是高性能I/O设计中,常用的设计模式。其中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上,一旦有I/O事件到来或是准备就绪…...
精通 TensorFlow 2.x 计算机视觉:第二部分
原文:Mastering Computer Vision with TensorFlow 2.x 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,…...
《算法竞赛进阶指南》0x51 线性DP
0x51 线性DP 271. 杨老师的照相排列 题意: NNN 个人站成左端对齐的 kkk 排,每排有 NiN_iNi 人,Ni>NjN_i > N_jNi>Nj 如果 i<ji < ji<j,则 Ni>NjN_i > N_jNi>Nj 。每一排从左到右身高递减&…...
spring数据库事务管理
1.什么是事务 事务是逻辑上的一组操作,要么都执行,要么都不执行。 需要注意的是:事务能否生效数据库引擎是否支持事务是关键。比如常用的 MySQL 数据库默认使用支持事务的 innodb引擎。但是,如果把数据库引擎变为 myisam&#x…...
Huggingface微调BART的代码示例:WMT16数据集训练新的标记进行翻译
BART模型是用来预训练seq-to-seq模型的降噪自动编码器(autoencoder)。它是一个序列到序列的模型,具有对损坏文本的双向编码器和一个从左到右的自回归解码器,所以它可以完美的执行翻译任务。 如果你想在翻译任务上测试一个新的体系…...
synchronized 的 monitor 机制
synchronized 的 monitor 机制 前言 本文基于 jdk 8 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 monitor monitor 是 synchronized 中用以实现线程之间的互斥与协作的主要手段,它可以看成是对象或者 class 持有的锁。每一个对象…...
NumPy 初学者指南中文第三版:1~5
原文:NumPy: Beginner’s Guide - Third Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 一、NumPy 快速入门 让我们开始吧。 我们将在不同的操作系统上安装 NumPy 和相关软件,并看一些使用 NumPy 的简单代码。 本章简要介绍了 IPython…...
ChatGLM-6B论文代码笔记
ChatGLM-6B 文章目录 ChatGLM-6B前言一、原理1.1 优势1.2 实验1.3 特点:1.4 相关知识点 二、实验2.1 环境基础2.2 构建环境2.3 安装依赖2.4 运行2.5 数据2.6 构建前端页面 3 总结 前言 Github:https://github.com/THUDM/ChatGLM-6B 参考链接:…...
机器学习入门实例-加州房价预测-1(数据准备与可视化)
问题描述 数据来源:California Housing Prices dataset from the StatLib repository,1990年加州的统计数据。 要求:预测任意一个街区的房价中位数 缩小问题:superwised multiple regressiong(用到人口、收入等特征) univariat…...
【ROS2指南-20】了解ROS2组件的用法
在单个进程中组合多个节点 目录 背景 运行演示 发现可用组件 使用 ROS 服务 (1.) 与发布者和订阅者的运行时组合 使用 ROS 服务 (1.) 与服务器和客户端的运行时组合 使用 ROS 服务的编译时组合 (2.) 使用 dlopen 的运行时组合 使用启动动作组合 高级主题 卸载组件 重新…...
使用AI进行“文本纠错”
AI在现实中的应用有很多,你有没有想过,它还可以进行文本纠错呢?传统的校对既耗时又枯燥,通过“AI纠错”,不仅能更快完成,还能提高准确度。那么AI“文本纠错”背后的原理是什么呢?和我一起看看吧…...
第九章 法律责任与法律制裁
第九章 法律责任与法律制裁_副本 目录 第一节 法律责任的概念 一 法律责任的含义二 法律责任的特点 第二节 法律责任的分类与竞合 一 法律责任的分类 (一)根据责任行为所违反的法律的性质 民事责任:刑事责任行政责任违宪责任 (二…...
如何选择好用的海康视频恢复软件?综合考虑这几点
海康视频恢复通常是指从海康威视监控设备中恢复删除或丢失的视频。在使用海康设备进行监控时,一些重要的视频可能会被误删除或其他原因导致丢失,如果没有及时备份,数据就可能会“永久”丢失?其实不然,我们可以选择好用…...
前端学习:HTML颜色(什么是RGB、HEX、HSL)
一、什么是RGB、HEX、HSL? 无论是RGB、HEX、HSL,它们的作用只有一个:用数字表达出一种颜色。 1.RGB RGB通过输入的数值,将红色、绿色和蓝色的光源以一定的量混合在一起,形成颜色。 软件中通常让你输入Red、Green、B…...
zookeeper + kafka集群搭建详解
目录 1.消息队列介绍 1.为什么需要消息队列 (MO) 2.使用消息队列的好处 3.消息队列的两种模式 2.Kafka相关介绍 1.Kafka定义 2.Kafka简介 3. Kafka的特性 3.Kafka系统架构 1. Broker(服务器) 2. Topic(一个队…...
【数据结构与算法】 - 双向链表 - 详细实现思路及代码
目录 一、概述 二、双向链表 三、双向链表实现步骤 📌3.1 C语言定义双向链表结点 📌3.2 双向链表初始化 📌3.3 双向链表插入数据 📌3.4 双向链表删除数据 📌3.5 双向链表查找数据 📌3.6 双向链…...
面试官在线点评4份留学生简历! 这些坑你中了几个?如何写项目描述才能被大厂发面试?转专业简历该咋写 | 还有优秀简历展示!
我们给大家展示一下 从材料的准备 也就是说到底包含哪些具体的项目 为什么说这些项目是不错的 第二呢就是说在陈述上 在整个这个简历的结构 他的完备性他的准确性 他的正确性 以及最后他的具体的这种项目的描述 那讲完了这个好的简历呢 我们另外搜集了几份简历 那这些简历呢其实…...
一觉醒后ChatGPT 被淘汰了
OpenAI 的 Andrej Karpathy 都大力宣传,认为 AutoGPT 是 prompt 工程的下一个前沿。 近日,AI 界貌似出现了一种新的趋势:自主人工智能。 这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归…...
spring框架的事务
1.什么是事务? 事务:是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合(工作逻辑单元…...
Spring配置数据源
Spring配置数据源数据源的作用环境准备手动创建c3p0数据源封装抽取关键信息,手动创建c3p0数据源使用Spring容器配置数据源数据源的作用 数据源(连接池)是提高程序性能如出现的 事先实例化数据源,初始化部分连接资源 使用连接资源时从数据源中获取 使用完…...
N_m3u8DL-RE:跨平台流媒体下载终极指南,三行命令破解加密视频
N_m3u8DL-RE:跨平台流媒体下载终极指南,三行命令破解加密视频 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/…...
告别Provider嵌套!用Naive UI的createDiscreteApi一键管理message、dialog、loadingBar
告别Provider嵌套!用Naive UI的createDiscreteApi一键管理全局反馈组件 在构建现代Vue 3应用时,全局反馈机制如消息提示(message)、对话框(dialog)、通知(notification)和加载条(loadingBar)是不可或缺的交互元素。传统方案需要在组件树中层层嵌套Provid…...
magic-api异常处理与错误排查:常见问题解决方案大全
magic-api异常处理与错误排查:常见问题解决方案大全 【免费下载链接】magic-api magic-api 是一个接口快速开发框架,通过Web页面编写脚本以及配置,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对…...
避坑指南:CubeMX配置STM32F429三重ADC时,ADC2/3的DMA请求为啥点不了?附手动开启代码
STM32F429三重ADC配置疑难解析:当CubeMX无法启用ADC2/3的DMA请求时如何手动突破限制 在嵌入式开发中,STM32系列微控制器因其丰富的外设资源而备受青睐,其中ADC(模数转换器)模块的性能直接影响信号采集系统的精度与速度…...
生成式 AI 的成本暗礁:FinOps 如何照亮从试点到规模化的全链路
前言 全球大模型市场正呈现爆发式增长态势。2025年全球大语言模型市场规模约140亿美元,预计到2032年将接近6910亿美元,未来六年年复合增长率(CAGR)高达74.9%。2026年第一季度,全球LLM月活跃用户已突破38亿人ÿ…...
2026生鲜零售收银软件推荐:四大主流方案深度对比
开一家生鲜店,最让人头疼的往往不是进货渠道或选址,而是每天高峰期那台“卡住”的收银机。想象一下,周末傍晚顾客排成长龙,称重员手忙脚乱地输入代码,屏幕转圈加载,后面的顾客开始不耐烦地催促,…...
Univer开源项目部署完整指南:从零到生产环境
Univer开源项目部署完整指南:从零到生产环境 【免费下载链接】univer Build AI-native spreadsheets. Univer is a full-stack framework for creating and editing spreadsheets on both web and server. With Univer Platform, Univer Spreadsheets is driven dir…...
华为od机试 新系统-麻将基本胡牌型判断(C/C++/Py/Java/Js/Go)
麻将基本胡牌型判断 华为OD新系统机试真题 华为OD新系统上机考试真题 5月17号 100分题型 华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录|机考题库 + 算法考点详解 题目内容 给定 14 14 14张麻将牌,只包含三种花色:万(用 1 1 1表示)、条(用...
Utools插件分离功能详解:像浏览器开标签页一样,同时运行多个效率工具
Utools插件分离功能实战:打造多窗口并行工作流的高效引擎 在数字工作时代,效率工具的价值早已超越了单一功能的实现,而在于如何无缝融入复杂的工作场景。对于开发者、内容创作者和知识工作者而言,真正的痛点往往不在于缺少工具&am…...
STM32CubeMX配置FreeRTOS时,那个不起眼的定时器TIM16到底在干嘛?新手避坑指南
STM32CubeMX配置FreeRTOS时,那个不起眼的定时器TIM16到底在干嘛?新手避坑指南 第一次在STM32CubeMX里勾选FreeRTOS组件时,很多开发者会对配置页面底部那个"Hardware Timer"选项感到困惑——为什么默认选中了TIM16?这个看…...
