简介

        在谈及Redis为什么快的时候,很多人都只能回答redis是基于内存,所以快。但他们往往不知道,决定redis快的因素,还有它的IO模型-Reactor模型。谈及Redis的IO模型之前,先补充一下IO模型的基础知识。

IO模型演化

        1.堵塞IO

        指线程会一直阻塞等待网卡数据准备就绪,直到完成数据读写完成。由此可以看出来,在获取到数据之前,会一直等待。这种模式极其浪费资源,效率低下。

        2.非堵塞IO

         指线程获取数据时,当发现数据没有准备就绪时,直接返回,不会等待。应用层持续轮询,直到获取这个数据。

        

        可以看出来,堵塞IO和非堵塞IO都是需要启动一个线程主动获取数据,是一种同步调用的行为。有没有异步通知的机制呢?

        3.时间驱动模型

        以事件为连接点,当有IO事件准备就绪时,以事件的形式通知相关线程进行数据读写,进而业务线程可以直接处理这些数据,这一过程的后续操作方,都是被动接收通知.它是一种通知机制,而不需要启线程自己主动去获取。大大减少了资源的浪费。

        4.Reactor模型

1.Reactor 对象通过 select (IO 多路复用接口) 监听事件,收到事件后通过 dispatch 进行分发,具体分发给 Acceptor 对象还是 Handler 对象,还要看收到的事件类型

2.如果是连接建立的事件,则交由 Acceptor 对象进行处理,Acceptor 对象会通过 accept 方法 获取连接,并创建一个 Handler 对象来处理后续的响应事件;

3.如果不是连接建立事件, 则交由当前连接对应的 Handler 对象来进行响应

核心流程概括:1.select监听 2.dispatch分发 3.handle处理

        总结:Redis就是参考了Reactor模型,实现了异步监听+请求分发机制,进而提高了处理性能。Reactor模型在Kafka通信中也有体现,例如在Kafka专栏的这一节里,介绍了Kafka处理请求的模式:八、Kafka的请求是如何处理的-CSDN博客 。当然除了Kafka、很多高性能的中间件例如Netty也实现了Reactor模型

参考:高性能网络编程之 Reactor 网络模型(彻底搞懂)_reactor网络模型-CSDN博客

参考:9.3 高性能网络模式:Reactor 和 Proactor | 小林coding

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比

下面从 API 定位、坐标体系、性能表现、面试常问点几个维度详细对比 Cesium、Three.js 与原生 WebGL 的绘制差异。 🧭 1. API 定位与典型应用 Cesium 聚焦全地球 GIS 场景,支持地形、影像、时空动态等地理信息功能,是专业级地图应用首选。 T…

单点登录(SSO)系统

设计一个 Java 单点登录(SSO)系统需要解决跨系统认证和会话共享问题。以下是核心设计和实现方案,包含关键组件和代码示例: 一、核心概念 认证中心 (Auth Center):中央身份验证服务令牌 (Token):用户身份凭…

《信息技术》科技核心期刊推荐

【科研必看】《信息技术》——科技核心期刊,助力你发表高影响力论文! 如果你是一位科研工作者、学者或者在校学生,正在为发表论文而努力,那么《信息技术》期刊无疑是你不可错过的选择!这本期刊以其卓越的学术影响力&am…

界面组件DevExpress WPF中文教程:Grid - 如何遍历节点?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

2D写实交互数字人:让AI形象拥有“真人温度“的技术革命

在人工智能技术日新月异的今天,数字人已不再是科幻电影中的概念,而是逐步渗透到我们日常生活的各个领域。然而,市场上大多数数字人产品仍停留在"能说会动"的初级阶段,缺乏真正的情感交互能力,这种"机械…

2025 年拓客系统排行榜

在数字化营销时代,拓客系统成为企业获取客户资源、提升销售效率的关键工具。以下为您盘点 2025 年表现出色的中文名字拓客系统,其中 微拓客 凭借强大功能脱颖而出,成为众多从业者的首选。 一、微拓客:精准拓客的全能王者 微拓客堪…

TikTok 矩阵如何快速涨粉

在社交媒体的广袤天地里,TikTok 以其强大的影响力和庞大的用户基础,成为众多创作者和品牌竞相角逐的舞台。构建 TikTok 矩阵,是扩大影响力、实现快速涨粉的有效策略。那么,究竟如何让 TikTok 矩阵快速涨粉呢?下面将为您…

基于微信小程序和云开发的企业绿色融资平台的设计与实现

文章目录 摘要前言绪论1. 课题背景2. 国内外现状与趋势2.1 国内研究现状2.2 国外研究现状2.3 发展趋势3. 课题内容相关技术与方法介绍1. 微信小程序开发技术2. 腾讯云开发平台3. 绿色项目评估模型4. 智能匹配算法5. 碳核算方法系统分析1. 需求分析1.1 用户需求1.2 功能需求1.3 …

如何自建服务器并开启公网IP:本地内网网址让外网访问详细教学

本地内网环境自建服务器后,如何让外网访问,提供互联网连接服务呢?有不少方法都可以实现,常见的有如公网IP、DDNS动态域名、nat123内网穿透等,下面详细教学。 一、申请开公网IP-----------------公网IP篇-------------…

企业公用电脑登录安全管控的终极方案:ASP操作系统安全登录管控方案

一、引言:公用电脑——企业安全管理的“灰色地带” 在企业办公场景中,公用电脑(如会议室电脑、生产线终端、客服工位)因多用户共用、权限复杂,往往成为安全管理的薄弱环节。员工随意登录、弱密码泛滥、敏感数据泄露事…

HarmonyOS-ArkTS开发指南:从基础到实战

目录 一、基础语法 二、声明式 UI 开发 基本组件结构 三、状态管理 四、生命周期钩子 五、组件化开发 1. 创建自定义组件 2. 组件嵌套 六、事件处理 七、布局系统 八、样式设置 九、条件渲染与列表渲染 十、异步操作 十一、路由导航 开发建议 一、基础语法 ArkT…

算法-Day04

今天还是给大家分享几道题目,希望大家可以好好理解。 第一题 问题描述 小蓝有一天误入了一个混境之地。 好消息是:他误打误撞拿到了一张地图,并从中获取到以下信息: 混境之地是一个 n⋅m大小的矩阵,这个地图中一共…

Git版本控制详细资料

Git安装基本配置 下载安装(一路next) 打开bash终端(git专用) 命令: git -v(查看版本号) 配置: 用户名和邮箱,应用在每次提交代码版本时表明自己身份 命令: git config --global user.name "FT" git config --global user.email "F…

利用井云平台把Coze工作流接入小程序/网站封装变现 | 详细步骤→

今天来看看怎么把Coze工作流接入井云生成你的专属网站/小程序! 当前已支持三大模块接入:✅ 工作流 ✅ 智能体 ✅ 外部网页 本文所用工具 1、扣子:www.coze.cn 2、井云智能体:jingyun.center 为什么选择井云平台? …

linux weston flutter remote desktop

参考:Outputs — weston 14.0.90 documentation Weston 14.0: DRM-backend, color management, and output mirroring Weston 14.0: DRM-backend, color management, and output mirroring 🖥️ 3. DRM 输出可镜像至远程输出(RDP、VNC、PipeWire) 这次更新还带来了一个…

GitHub Copilot 是什么,怎么使用

GitHub Copilot 是一个由 GitHub 和 OpenAI 联合开发的 AI 编程助手,它可以在你写代码的时候自动给出建议、补全代码,甚至生成整个函数或算法。它就像一个“聪明的副驾驶”,时刻在你旁边协助你写代码。 简单解释: GitHub Copilot …

Android系统及应用QUIC协议支持详解

QUIC协议在Android中的全面支持与实践指南 本文深入探讨QUIC协议在Android中的实现细节,涵盖基础原理、开发技巧、性能优化及前沿扩展,提供完整的Kotlin代码示例和工程实践指南。 1. QUIC协议核心优势 QUIC(Quick UDP Internet Connections&…

.NET基于类名约定的自动依赖注入完整指南

🚀 .NET基于类名约定的自动依赖注入完整指南 基于类名约定的自动依赖注入可大幅减少手动注册服务的工作量,本文将通过清晰的结构、美观的排版和丰富的示例,帮助你快速掌握这一实用技术。 🌈 核心特性概览 特性说明类名约定自动…

Redis各数据结构的详细使用和使用场景

Redis各数据结构的详细使用 大家好!今天我们来聊聊Redis这个强大的内存数据库。就像我们生活中的工具箱一样,Redis提供了多种"工具"(数据结构)来帮助我们解决不同的问题。有些工具像螺丝刀(字符串&#xff…

MSYS2 环境下 Python 开发配置(结合 PyCharm)使用笔记

【笔记】MSYS2 的 MinGW64 环境中正确安装 Python 相关环境管理工具 (Poetry、Virtualenv、Pipenv 和 UV)-CSDN博客 MSYS2 环境配置与 Python 项目依赖管理笔记_msys更新python-CSDN博客 【技术笔记】MSYS2 指定 Python 版本安装方案_pacman -u 安装指定…