Redis多路复用在不同操作系统的性能

Redis多路复用

在redis中在不同系统中会使用不同的模型,但是多路复用的原理还是一个进程或者线程可以同时处理多个连接,不需要为每个连接都创建一个单独的线程或者进程。不同的多路复用机制在具体实现有一些差异,但是核心思想还是单个进程或进程处理多个事件。

在单线城的并发性是指: 一个线程轮询获取新的事件进行处理。

多路复用的工作原理

Epool模型 Linux下默认的模型

Epool的工作原理就是使用三个系统调用epoll_create、pool_ctl和epool_wait。它通过注册时间和就绪事件轮询方式,通知程序发生的事件。

状态变化表(读和写事件)示某个文件描述符(文件、websocks)关联的 I/O 资源发生了可读、可写或其他事件

​ **epoll_create:**创建一个epool实列,然后一个文件描述符,该描述符用于标识epoll实列。

​ **epoll_ctl:**用于向epoll实列中添加、修改或删除需要监视的文件描述符。

​ **epoll_wait:**用于等待文件描述符上的事件发生。

数据结构设计

数据结构设计: epoll使用红黑树存储文件描述符,这使得在变动添加和删除文件描述的时候时间复杂度为O(0),这和kqueue的数据结构使用链表或者数据相比,更为高效。

触发模式: Epool的触发模式有2种。水平触发和边缘触发

​ **水平触发:**只要文件描述符的状态有变化,就会通知应用程序 (默认)

水平触发的优点: 使用场景处理持续性IO事件。

边缘触发: 仅在状态变化的时候发送通知 ,需要应用程序处理所有未处理的事件(只会发一次)。

​ **边缘通知的优点:**避免重复发送通知造成的性能浪费,适用于更加精细的控制和处理场景。

​ 这种设计可以使得我们epool支持不同的场景。

​ **支持的文件描述数量:**epool在设计上更适用于大规模并发连接,因为他能处理万计的文件描述符,随着连接的数量增加,性能也不会线性下降,相比之下,kqueue会出现这个情况。

​ **效率和性能:**epool的实现内核采用了一些优化策略,入采用基于事件的回调机制,能够加高效率处理并发连接,这在高并发环境下,epoll的性能更好。

在Redis中默认是使用水平触发的,如果我们想要修改为bian’yuan可以在redis配置文件进行修改,

Redis6.0版本 使用 I\O Completion Ports 在Windows

I\OCP提供了一种高效的异步I\O机制,特别适合处理并发连接的场景。I\OCP是widows提供的一种异步I\O完成通知机制,它允许IO在完成的时候发送通知,而不需要程序不断地询问文件描述符的状态。

在使用IOCP的时候首先会创建一个完成端口对象,然后再将我们的套接字(比如我们的连接操符)或者文件句柄(就是我们要操作的文件)绑定在这个完成端口对象上,然后提交我们的异步IO上,然后就是等待我们的完成包,当我们的完成包处理完会通知我们我们IOCP,这个完成包包含了操作类型、操作结果和我们的套接字或文件句柄,然后我们IOCP拿到这个完成包会根据不同的操作类型进行响应,比如读就会得到读的结果。

因为在我们收到完成包的时候会通知我们IOCP,然后对我们的IO结果进行处理,也就是说当我们收到事件就异步。然后等通知从而实现。

也就是说如果需要网络通信那么我们先创建一个接口完成对象,然后我们套接字和我们的接口完成对象绑定,然后异步io。如果不需要进行网络通信操作那么就在创建一个接口完成对象,然后在和一个文件句柄关联进行操作,然后进行异步操作。

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

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

相关文章

C++ 如何使用二维map(二维map使用简单例子)

在C中&#xff0c;可以使用std::map来创建二维map。 首先&#xff0c;你需要包含<map>头文件&#xff1a; #include <map>然后&#xff0c;你可以声明一个map对象&#xff0c;其中一个维度用作键&#xff0c;另一个维度用作值。例如&#xff0c;如果你想创建一个…

华为数通方向HCIP-DataCom H12-831题库(多选题:181-200)

第181题 如图所示,R1、R2、R3、R4都部署为SPF区域0,链路的cost值如图中标识。R1、R2R3、R4的Loopback0通告入OSPF。R1、R2、R3与R4使用Loopback0作为连接接口,建立BGP对等体关系,其中R4为RR设备,R1、R2、R3是R4的客户端。当R4的直连地址172.20,1,4/32通告入BGP后,以下关R…

mysql部署 --(docker)

先查找MySQL 镜像 Docker search mysql &#xff1b; 拉取mysql镜像&#xff0c;默认拉取最新的&#xff1b; 创建mysql容器&#xff0c;-p 代表端口映射&#xff0c;格式为 宿主机端口&#xff1a;容器运行端口 -e 代表添加环境变量&#xff0c;MYSQL_ROOT_PASSWORD是root用户…

2024云渲染平台推荐!免费云渲染平台(注册账号)推荐

近期&#xff0c;由于信息科技和云计算的迅猛发展&#xff0c;云渲染服务也逐步蓬勃发展并已达到成熟阶段&#xff0c;它因其高效办公、成本效益优越以及操作简便易行&#xff0c;赢得了广大设计师和 CG 艺术家的热烈欢迎&#xff0c;在过去的岁月里&#xff0c;创造一张高清晰…

OpenCV技术应用(8)— 如何将视频分解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何将一幅图像转化成热力图&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍 视频是…

charles和谷歌浏览器在Mac上进行软件安装,桌面上会显示一个虚拟磁盘,关掉页面推出磁盘内容都消失掉了 需要再次安装问题解决

其他软件也会有这种情况&#xff0c;这里我们以charles为例。绿色背景的内容是重点步骤。 1.如图&#xff0c;我下载了一个charles一个版本的dmg文件。 2.打开后&#xff0c;选择Agree 3.桌面会出现一个磁盘和如下页面 4.错误操作------可以不看 直接看第5步正确操作 常规情…

Socket.D 基于消息的响应式应用层网络协议

首先根据 Socket.D 官网的副标题&#xff0c;Socket.D 的自我定义是&#xff1a; 基于事件和语义消息流的网络应用协议。官网定义的特点是&#xff1a; 基于事件&#xff0c;每个消息都可事件路由所谓语义&#xff0c;通过元信息进行语义描述流关联性&#xff0c;有相关的消息…

【Java JVM】JVM 分析工具

在 $JAVA_HOME/bin 的目录下, 存在着许多小工具, 除了编译和运行 Java 程序外, 打包, 部署, 签名, 调试, 监控, 运维等各种场景都可能会用到它们。 1 常用的命令行工具 1.1 jps (JVM Process Status Tool) - 虚拟机进程状况工具 列出正在运行的虚拟机进程, 并显示虚拟机执行…

Android Studio设置android:background 属性背景颜色

除了默认的颜色之外都要自己添加。 添加颜色的操作步骤&#xff1a; 打开res文件夹&#xff0c;找values&#xff0c;里面有个colors.xml的文件。然后在里面定义一些颜色。 完成

java 10. 注解

java 10. 注解 文章目录 10.1 什么是注解10.2 内置的注解10.2.1 Override 10.3 自定义注解10.4 元注解 10.1 什么是注解 注解&#xff0c;一种元数据形式&#xff0c;提供有关程序的数据&#xff0c;该数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注解的语…

Spring和Spring Boot的主要区别

Spring 和 Spring Boot 是两种不同的 Java 框架&#xff0c;尽管它们具有许多相似之处&#xff0c;但它们在目的、配置方式、起步依赖、运行方式和适应性等方面仍然存在许多不同。 首先&#xff0c;他们的目的不同&#xff0c;Spring 的主要目的是为 Java 应用程序提供一个基础…

21、Web攻防——JavaWeb项目JWT身份攻击组件安全访问控制

文章目录 一、JavaWeb二、JWT攻击 一、JavaWeb webgoat 1.java web的配置文件&#xff0c;配置文件一般在META-INF目录下&#xff0c;文件名常为pom.xml或web.xml 2.如何通过请求&#xff0c;查看运行的java代码。 地址信息PathTraversal/profile-upload 直接找到以该字符P…

网络安全知识图谱 图数据库介绍及语法

本体构建: 资产&#xff1a; 系统&#xff0c;软件 威胁&#xff1a; 攻击&#xff1a; 建模&#xff1a; 3个本体 5个实体类型 CWE漏洞库 http://cwe.mitre.org/data/downloads.html CPECP攻击模式分类库 http://capec.mitre.org/data/downloads.html CPE通用组件库 http:…

spring使用@Scheduled配置定时任务

schedule的使用 在Spring中&#xff0c;你可以使用Scheduled注解来标记一个方法&#xff0c;使其成为一个定时任务。一般情况下Scheduled注解修饰的任务方法没有返回值也没有入参。 开启schedule Configuration EnableScheduling public class ScheduleConfig {}在配置类上使…

B树和B+树的区别

1.节点结构&#xff1a; a.B树&#xff1a; B树的每个节点包含键和对应的值&#xff0c;子节点的数量和键的数量相等。在B树中&#xff0c;每个节点都存储键和值&#xff0c;并且非叶子节点的键值对应于其子节点的范围。 b.B树&#xff1a; B树的非叶子节点只包含键&#xff0…

Modbus RTU协议与S7 200 PLC通讯

一、Modbus RTU功能码 二、功能码使用与解析实例 01功能码 –读线圈状态 主机发送&#xff1a;01 01 00 01 00 08 6C 0C 从机回复: 01 01 01 2F 10 54 主机解析&#xff1a;01 地址(设备ID)&#xff1b; 01 功能码&#xff1b;00 01 代表查询的起始线圈地址&#xff0c;即…

二叉树题目:输出二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;输出二叉树 出处&#xff1a;655. 输出二叉树 难度 6 级 题目描述 要求 给定二叉树的根结点 root \textt…

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中&#xff0c;我们探索了顺序表这一基础的数据结构&#xff0c;它提供了一种有序存储数据的方法&#xff0c;使得数据的访 问和操作变得更加高效。想要进一步了解&#xff0c;大家可以移步于上一篇文章&#xff1a;探索顺序表&#xff1a;数据结构中的秩序之美 今…

06.仿简道云公式函数实战-前瞻

1.前言 在上篇文章中&#xff0c;我们介绍了QLExpress的进阶知识&#xff0c;扩展操作符&#xff0c;自定义操作符和自定义函数等内容。学了上面的内容后&#xff0c;目前对于QLExpress使用已经问题不大&#xff0c;从这篇文章&#xff0c;我们就进入我们的主题仿简道云公式函…

mysql索引优化案例

案例1 select * from order where user_id 11 and status 1 and id > 10000 limit 10 2个索引 user_id 、 id 场景 偶然会查询的慢&#xff0c;且不容易复现 原因 id大的时候&#xff0c;mysql评估后使用id更快&#xff1b;但是实际上会多几次IO查询 &#x…