12_Redis为什么这么快高性能设计之epoll和IO多路复用深度解析

Redis为什么这么快&高性能设计之epoll和IO多路复用深度解析

一、before

  1. 多路复用要解决的问题

    image-20230319154340473

  2. 结论

    image-20230319155309800

二、IO多路复用模型

2.1 是什么

  1. IO:网络IO
  2. 多路:多个客户端连接(连接就是套接字描述符,即socket或者channel),指的是多条TCP连接
  3. 复用:用一个进程来处理多条连接,使用单进程就能够实现同时处理多个客户端的连接
  4. 总结:
    1. 实现了用一个进程来处理大量的用户连接
    2. IO多路复用类似一个规范和接口,落地实现可以分 select -> poll -> epoll 三个阶段来描述

2.2 Redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快

image-20230319160424150

image-20230319160936179

2.3 参考《Redis设计与实现》

image-20230319161121276

image-20230319161139834

总结:

image-20230319161354986

2.4 同步&异步&阻塞&非阻塞

案例:

image-20230319162128236

image-20230319162632728

  1. 同步

    调用者要一直等待调用结果的通知后才能进行后续的执行,现在就要,我可以等,等出结果为止。

  2. 异步

    指被调用方先返回答应,让调用者先回去,然后再计算调用结果,计算完最终结果后再通知并返回给调用方

    异步调用要想获得结果一般通过回调

  3. 同步与异步

    同步、异步的讨论对象是被调用者(服务提供者),重点在于获得调用结果的消息通知方式上

  4. 阻塞

    调用方一直在等待而且不能做别的任何事情,当前进程或线程会被挂起

  5. 非阻塞

    调用在发出后,调用方先去忙别的事情,不会阻塞当前进程或线程,而是立即返回

  6. 阻塞与非阻塞

    阻塞、非阻塞的讨论对象是调用者(服务请求者),重点在于等消息时候的行文,调用者能够干其他事情

  7. 总结

    1. 同步阻塞:服务员说快到你了,先别离开,我后台看一眼,马上通知你。客户在海底捞火锅前台干等着,啥都不干。
    2. 同步非阻塞:服务员说快到你了,先别离开。客户在海底捞火锅前台边刷抖音边等着叫号。
    3. 异步阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户怕过号,在海底捞火锅前台拿着排号小票等着,啥也不干,一直等着店员通知。
    4. 异步非阻塞:服务员说还要再等等,你先去逛逛,一会儿通知你。客户拿着小票排队,一边刷着抖音,等着店员通知。

2.5 Unix网络编程中的五种IO模型

  1. Blocking IO:阻塞IO
  2. NoneBlocking IO:非阻塞IO
  3. IO multiplexingIO 多路复用
  4. signaldriven IO:信号驱动 IO
  5. asynchrous IO:异步IO

2.6 Java验证

  1. BIO

    image-20230319164621390

    image-20230319164605250

  2. NIO

    image-20230319172246258

    image-20230319172136412

    image-20230319172508820

    image-20230319175040471

    image-20230319175459936

2.7 IO多路复用详情

  1. 是什么

    image-20230319194234968

    image-20230319194309103

    image-20230319194410111

    image-20230319194512676

    image-20230319194647239

    image-20230319194704503

    image-20230319195207905

  2. 能干嘛

    reactor设计模式

    image-20230319195713623

    image-20230319195736393

    image-20230319200029591

    每一个网络连接其实都对应一个文件描述符

    image-20230319200118856

    image-20230319200213305

  3. select、poll、epoll 都是IO多路复用的具体实现

    select

    image-20230319200340722

    优点:

    image-20230319200852164

    缺点:

    image-20230319200935350

    poll

    image-20230319201048673

    epoll

    总结:

    image-20230319204919544

    image-20230319205141500

  4. 5中IO模型总结

    image-20230319205340153

    image-20230319205313669

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 串口复习

按数据通信方式分类: 串行通信:数据逐位按顺序依次传输。传输速率较低,抗干扰能力较强,通信距离较长,I/O资源占用较少,成本较低。并行通信:数据各位通过多条线同时传输。 按数据传输方向分类&…

音视频学习-音视频基础

文章目录 一、 音视频录制原理二、音视频播放原理三、图像基础概念1.像素2.分辨率3.位深4.帧率5.码率6.Stride跨距 四、RGB、YUV1.RGB2.YUV1. 4:4:4格式2. 4:2:2格式3. 4:2:0格式4. 4:2:0数据格式对比 3.RGB和YUV的转换4.YUV Stride对齐问题 五、视频的主要概念1.基本概念2.I P…

Slingshot | 细胞分化轨迹的这样做比较简单哦!~(二)

1写在前面 今天又值班了,你没有听错!! 🥲 又值班了!!!!😅 最近自己的确不太在状态,做事情有极强的拖延症,要振奋起来啦,man&#xff0…

【数据结构OJ题】合并两个有序链表

原题链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 可以先创建一个空链表,然后依次从两个有序链表中选取最小的进行尾插操作。(有点类似双…

尚硅谷大数据项目《在线教育之离线数仓》笔记002

视频地址:尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 P025 P026 P027 P028 P029 P030 P031 P032 P033 P034 P035 P036 P037 P038 P025 在Hive所在节点部署Spark P026 3)Hive on Spark测试 (1)…

RequestRespons

文章目录 Request&Respons1 Request和Response的概述2 Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式 2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请…

窗口看门狗

从下往上看: 1. 时钟设置 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//使能独立看门狗时钟 WWDG_SetPrescaler(WWDG_Prescaler_8);//看门狗预分频器WWDG counter clock (PCLK1/4096)/8 2.设置窗口值 实际就是设置WWDG_CR的低七位值, 但是这个值要大于0x40(也就是…

MAC QT开发攻略

文章目录 基础步骤安装QT、QTCreator安装CMakeNinja 安装Clion编译器在QTCreator中新建项目更改CMake生成器 导入Clion CMake生成文件 基础步骤 安装QT、QTCreator 安装CMake 由于clion需要使用cmake构建 Ninja Ninja下载 安装Clion编译器 Clion 2023.1.3 破解版安装教程…

Python写一个创意五子棋游戏

前言 在本教程中,我们将使用Python写一个创意五子棋游戏 📝个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python系列专栏 - 从零开始学python 首先 GomokuGame 类的构造函数 __ini…

Spring源码编译-for mac

超详细的spring源码编译 记:编译成功时间:2023.08.19 环境准备: 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本:spring-framework-v5.2.25.RELEASE) 一.spring源码下载 github 加速网站&…

博弈论 | 斐波那契博弈

斐波那契博弈 博弈论是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论。博弈论是研究互动决策的理论。博弈可以分析自己与对手的利弊关系,从而确立自己在博弈中的优势,因此有不少博弈理论,可以帮助对弈者分析局势,从而采取相应策略,最终达…

PHP酒店点菜管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 酒店点菜管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88232051 论文 https://…

【100天精通python】Day42:python网络爬虫开发_HTTP请求库requests 常用语法与实战

目录 1 HTTP协议 2 HTTP与HTTPS 3 HTTP请求过程 3.1 HTTP请求过程 3.2 GET请求与POST请求 3.3 常用请求报头 3.4 HTTP响应 4 HTTP请求库requests 常用语法 4.1 发送GET请求 4.2 发送POST请求 4.3 请求参数和头部 4.4 编码格式 4.5 requests高级操作-文件上传 4.6 …

UGUI可视化组件Image, RawImage

一.组件Image 1.1 Image的属性 创建的Image对象自带Image组件,用来显示图片,其属性说明如下 属性:功能:Source Image表示要显示的图像的纹理(必须作为精灵导入)。Color要应用于图像的颜色,会和…

【NetCore】09-中间件

文章目录 中间件:掌控请求处理过程的关键1. 中间件1.1 中间件工作原理1.2 中间件核心对象 2.异常处理中间件:区分真异常和逻辑异常2.1 处理异常的方式2.1.1 日常错误处理--定义错误页的方法2.1.2 使用代理方法处理异常2.1.3 异常过滤器 IExceptionFilter2.1.4 特性过…

更安全,更高效的自学网络安全与黑客技术

学习网络安全(黑客技术) 网络安全是:黑客技术是:网络安全与黑客技术的关系:自学网络安全学习的误区和陷阱:学习网络安全前期需要准备...学习网络安全中期大致步骤:学习网络安全推荐的学习资料&a…

电商增强现实3D模型优化需要关注的4个方面

到目前为止,AR技术已经发展到足以在更广泛的范围内实施。 在电子商务中,这项技术有望提供更令人兴奋的购物体验。 为了实现这一目标,在这篇博客中,我将介绍如何针对电子商务中的 AR 优化 3D 模型。 推荐:用 NSDT编辑器…

SpringBoot 学习(03): 弱语言的注解和SpringBoot注解的异同

弱语言代表:Hyperf,一个基于 PHP Swoole 扩展的常驻内存框架 注解概念的举例说明; 说白了就是,你当领导,破烂事让秘书帮你去安排,你只需要批注一下,例如下周要举办一场活动,秘书将方…

ARM体系结构学习笔记:任何算法可通过下面的三种模式组合而成

任何算法可通过下面的三种模式组合而成 条件跳转和无条件跳转 条件命名规则 关于比较的一些哲学问题 汇编实现if else [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8R5cYTQ-1692236026691)(https://cdn.jsdelivr.net/gh/nzcv/picgo/202201172242…

数据结构——B-树、B+树、B*树

一、B-树 1. B-树概念 B树是一种适合外查找的、平衡的多叉树。一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,它可以是空树或满足以下性质: (1)根节点至少有两个孩子。 (2&#…