redis底层—网络模型

news2024/9/24 23:22:00

1.用户空间和内核空间

2.阻塞IO

3.非阻塞IO

 4.IO多路复用

select模式的三个问题:
能监听的FD最大不超过1024
每次select都需要把所有要监听的FD都拷贝到内核空间
每次都要遍历所有FD来判断就绪状态


poll模式的问题:
poll利用链表解决了select中监听FD上限的问题,但依然要遍历所有FD,如果监听较多,性能会下降


epoll模式中如何解决这些问题的?
1.基于epoll实例中的红黑树保存要监听的FD,理论上无上限,而且增删改查效率都非常高,性能不会随监听的FD数量增多而下降
2.每个FD只需要执行一次epoll_ctl添加到红黑树,以后每次epol_wait无需传递任何参数,无需重复拷贝FD到内核空间
3.内核会将就绪的FD直接拷贝到用户空间的指定位置,用户进程无需遍历所有FD就能知道就绪的FD是谁

1.select

过程:

存在的问题:
1.需要将整个fd_set从用户空间拷贝到内核空间,select结束还要再次拷贝回用户空间
2.select无法得知具体是哪个fd就绪,需要遍历整个fd_set
3.fd_set监听的fd数量不能超过1024 

2.poll(性能相比select无明显提升)

过程:

3.epoll

过程:

 4.例子:web服务流程

 5.redis为什么选择单线程?

Redis到底是单线程还是多线程?
• 如果仅仅聊Redis的核心业务部分(命令处理),答案是单线程
• 如果是聊整个Redis,那么答案就是多线程
在Redis版本迭代过程中,在两个重要的时间节点上引入了多线程的支持:
• Redis V4.0:引入多线程异步处理一些耗时较长的任务,例如异步删除命令unlink
• Redis V6.0:在核心网络模型中引入 多线程,进一步提高对于多核CPU的利用率

为什么Redis要选择单线程?
1.抛开持久化不谈,Redis是纯内存操作,执行速度非常快,它的性能瓶颈是网络延迟而不是执行速度,因此多线程并不会带来巨大的性能提升。
2.多线程会导致过多的上下文切换,带来不必要的开销。
3.引入多线程会面临线程安全问题,必然要引入线程锁这样的安全手段,实现复杂度增高,而且性能也会大打折扣 。

6.redis的网络模型

 

 整体而言:就是IO多路复用+事件派发,在此过程中不断监听客户端和服务端的socket的事件(可读/可写),监听到事件后做派发给三个不同的处理器

服务端可读处理器:接受客户端socket,注册客户端fd到多路复用程序

客户端可读处理器:接受请求,把请求读到缓冲区,等待排队输出,同时触发写事件

客户端可写处理器:写事件触发,将内容写到客户端

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

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

相关文章

信号保存和处理

把上一篇回顾一下吧:共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,进程不再通过执行进入内核的系统调用来传递彼此的数据 共享内存的数据结构: struct shmid_ds {…

3D技术在电商行业的应用有哪些?

‌3D技术在电商行业的应用广泛且多样化,主要涵盖以下几个方面‌: ‌1、商品展示‌: 通过3D模型进行全方位的展示,支持720旋转和任意缩放,使消费者能够更直观地了解产品的外观、结构和特点。这种展示方式不仅提高了消…

前端网络请求库:Axios

目录 1. 网络请求的基本概念 1.1 网络请求的基础HTTP协议 1.2 HTTP工作原理 1.3 TCP连接 1.31 建立TCP连接 1.31 关闭TCP连接 1.4 HTTP的请求方法 1.5 HTTP的响应状态码分类 1.6. 前端网络请求方式 2. Axios在在vue项目中的使用 2.1安装与使用 2.2 Axios使用HTTP请求…

碰撞检测 | 详解圆-矩形碰撞检测与N圆覆盖模型(附ROS C++可视化)

目录 0 专栏介绍1 N N N圆覆盖碰撞模型2 圆与矩形的碰撞检测3 算法仿真与可视化3.1 核心算法3.2 仿真实验 0 专栏介绍 🔥课设、毕设、创新竞赛必备!🔥本专栏涉及更高阶的运动规划算法轨迹优化实战,包括:曲线生成、碰…

HCIP--<OSPF2>

目录 一,OSPF的不规则区域 1)远离骨干区域的非骨干区域 2)不连续骨干区域(和上面一样) 二,OSPF数据库表 三。优化OSPF的LSA(缺少LSA的更新量) [1]手工汇总:减少骨干区域的LSA [2]特殊区域&…

from T2I to T2V

生成图片 在Stable Diffusion推理过程中,其使用unet对一个初始化的向量不断去噪,并编入条件信息 c c c ,最后使用vae-decoder将其上采样为一张图片。 计算过程: f l a t e n t u n e t ( f l a t e n t ) , f l a t e n t ∈ R…

frida主动调用init_array中的函数

ida打开目标so,查看要主动调用的函数 前提是先过掉检测frida等等,然后控制台启动 输出so地址 Process.findModuleByName("libmod.so") New函数 var aa new NativeFunction(ptr(0x785e002000).add(0x134EC0),"void",[]) 主动调用 a…

三种方式可以将彩色图像转成灰度图对比

有三种方式可以将彩色图像转成灰度图 1、直接imread(“1.jpg” , 0);直接读取灰度图像 2、读取彩色图像然后 灰度 0.299 * 红色 0.587 * 绿色 0.114 * 蓝色进行转换 3、调用cvtColor函数cvtColor(srcImg, imgShow, COLOR_BGR2GRAY); 通过测试来对比三者的区别&…

秋招面经9.11

1. JWT的过程解析 JWT(JSON Web Token)是一种基于 JSON 的开放标准(RFC 7519)实现的用于在各方之间传递信息的紧凑且自包含的方式。JWT 是一种 token,可以对信息进行数字签名(例如使用 HMAC 算法或 RSA 加…

[leetcode-python]杨辉三角2

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: rowIndex 3 输出: [1,3,3,1]示例 2: 输入: rowIndex 0 输出: [1]示例 3: 输入: rowIndex 1 输出: [1,1]提示…

Mycat2原理介绍

Mycat介绍 Mycat原理 Mycat 核心配置 Scheam.xml 逻辑数据库和节点对应关系配置Server.xml mycat的连接配置Rule.xml. 分片规则 自动分片auto-sharding-long,比如0-10000节点1 ,10001-20000节点2枚举分片sahrding-bt-intfile ,比如beijing节点1…

【828华为云征文|如何使用华为云Flexus X实例搭建私人博客:从配置到发布全指南】

文章目录 华为云Flexus X实例介绍搭建专属私人博客准备工作具体操作指南服务器环境确认宝塔软件商店操作一键部署WordPress私人博客域名解析WordPress安装初始页数据库信息配置运行安装程序配置博客信息博客管理后台(默认为wp-login.php页面)博客前台页面…

c语言位运算符速成

本篇文章对c语言速成系列的补充,其中的内容会涉及原反补以及& 、| 、 ~ 、^、位运算等等。那么,闲话少叙,我们直接进入正题 首先我们先来讲讲原反补 进制转换(前置知识) 在学原反补之前我们先来学几个机制转换的…

网络高级(学习)2024.9.10

目录 一、Modbus简介 1.起源 2.特点 3.应用场景 二、Modbus TCP协议 1.特点 2.协议格式 3.MBAP报文头 4.功能码 5.寄存器 (1)线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。 (2&#xff09…

C++——STL——栈(stack)

栈的定义 栈 ( stack )是限定仅在表的一端进行插入和删除操作的线性表,允许插入和删除的一端称 为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。 栈的示意图 因为栈只能够在一端进行插入和删除,所以…

【Lua学习】Lua入门

上一篇帖子【Lua学习】Lua最最基础的 – 经云的清净小站 (skycreator.top)讲了Lua是什么,Lua如何安装在Linux和Windows上。那么安装好之后,我们就要使用Lua实现我们的各种功能了。 首先,我们要先了解Lua一些最基本的内容,比如怎么…

杀毒软件 | Malware Hunter v1.189.0.816 绿色版

软件简介 Malware Hunter是由Glarysoft开发的一款专业安全防护软件。该软件的主要目的是保护用户的计算机免受恶意软件、病毒和其他网络威胁的侵害。它通过采用高效的云引擎和小红伞引擎,能够快速且全面地扫描电脑中的恶意软件,并进行强力清除&#xff…

5--SpringBoot、Mybatis

目录 Mybatis Mybatis入门操作步骤 1.准备工作 创建springboot工程 创建数据库表和实体类 连接数据库 创建接口XxxMapper 2.数据库连接池 Lombok 使用 Mybatis 准备工作 删除 日志输入 参数占位符 新增 更新 查询 驼峰命名 条件查询 XML 创建XML文件 编…

关于前端知识中框架概念部分的详细介绍

1、为什么要学习流行框架? 企业:为了提高效率,因为时间就是金钱。开发人员:提高了开发效率发展进程: JS>JQuery>模板引擎>框架时代(Angular(2)、React、Vue)好处:不用直接…

2.安卓逆向-初识java语言

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 上一个内容:1.安卓逆向-说明 关于java语言的介绍就不写了没啥用直接开始 首先java语言写的代码运行说明 …