首页 > 数据库 >redis自学(15)IO多路复用

redis自学(15)IO多路复用

时间:2024-03-11 15:45:54浏览次数:33  
标签:调用 15 redis 阻塞 用户 FD IO 就绪

 

无论是阻塞IO还是非阻塞IO,用户应用在一阶段都需要调用recvfrom来获取数据,差别在于无数据时的处理方案:

  •  如果调用recvfrom时,恰好没有数据,阻塞IO会使进程阻塞,非阻塞IO使CPU空转,都不能充分发挥CPU的作用。
  •  如果调用recvfrom时,恰好有数据,则用户进程可以直接进入第二阶段,读取并处理数据。

比如 服务端处理客户端Socket请求时,在单线程情况下,只能依次处理每一个Socket,如果正在处理的Socket恰好未就绪(数据不可读或不可写),线程就会被阻塞,所有其他客户端socket都必须等待,性能自然会很差。

 

 

多线程确实是可以提高效率,但也不是绝对的,因为CPU在多个线程间的上下文切换开销也很大,如果线程过多,反而会降低效率。

 

用户进程如何知道内核中数据是否就绪呢?

文件描述符(Flie Descriptor):简称FD,是一个从0开始递增的无符号整数,用来关联Linux中的一个文件。在Linux中,一切皆文件,例如常规文件、视频、硬件设备等,当然也包括网路套接字(Socket)。

IO多路复用:是利用单个线程来同时监听多个FD,并在某个FD可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。

 

 

与阻塞IO区别在哪里呢?区别在IO多路复用调用的是select命令,它包含的是对多个FD的监听,一旦有一个或者多个FD就绪了,就立马返回,然后用户态再调用recvfrom,准确的调用就绪的FD,如果多个FD都没有就绪,也会阻塞等待,但是这种可能性很小,但凡等待过程中有一个FD就绪了,就立马进行下一步了。

监听FD的方式、通知的方式又有多种实现,常见的有:

  •  Select
  •  Poll
  •  Epoll

差异:

  •  select和poll只会通知用户进程有FD就绪,但不确定具体是哪个FD,需要用户进程逐个遍历FD来确认
  •  epoll则会再通知用户进程FD就绪的同时,把已就绪的FD写入用户空间

标签:调用,15,redis,阻塞,用户,FD,IO,就绪
From: https://www.cnblogs.com/bulesea/p/18066202

相关文章

  • 客户说|从4小时到15分钟,一次分布式数据库的丝滑体验
    文/识货运维总监瞿晟荣识货APP致力于为广大用户提供专业的网购决策指导,为喜欢追求性价比的网购朋友带来及时劲爆的运动、潮流、生活、时尚等网购优惠资讯,产品覆盖国内外主流购物商城。它提供了全球范围内的时尚品牌、潮流单品的信息,帮助用户发现和购买最新、最热、最具性价......
  • sio风扇转速
    TemperatureLimitofOFF,TemperatureLimitofStart,TemperatureLimitofFULL,FanStartPWM,SlopePWM2。HardwareHealthConfigurationCPUFanModeSetting(CPU风扇设置)可选1:FullOnmode2:PWMManuallymode3:Automaticmode一、全速模式二、软件模式三、自动模式 ......
  • VMware Workstation安装+彻底卸载教程(Windows版)
    VMwareWorkstation是一款虚拟机软件,它允许你在一台电脑上创建并运行多个虚拟操作系统。就像在一台电脑上同时运行多个计算机一样,你可以在VMwareWorkstation中创建虚拟计算机,安装不同的操作系统(如Windows、Linux等),并在它们之间轻松切换。这对普通用户来说,就好像在电脑上开设了多......
  • redis安装和运维
    一安装1安装redis单例操作系统:debian121.1在线安装#直接安装,开机自启动aptinstallredis-server#检查安装情况systemctlstatusredis-serversystemctlstartredis-server#启动systemctlstopredis-server#停止systemctlrestartredis-server#......
  • HarmonyOS-安装篇(DevEco Studio)
    一、下载可通过官网下载:https://developer.harmonyos.com/cn/develop/devevo-studio二、安装(经过实践了)          三、配置•nodejs&ohpm配置  •SDK配置      •等待(这块还是稍微有点慢,不要焦急......
  • location /abc/ 和location /abc 有什么区别
    在Nginx的location指令中,路径规则末尾是否带斜杠/会影响匹配的行为。下面是/abc/和/abc两种情况的区别:location/abc/:这种配置会匹配以 /abc/ 开头的路径,例如 /abc/xyz 或 /abc/123。这个配置会匹配以 /abc/ 结尾的路径,但不会匹配 /abc(没有斜杠结尾)。nginx......
  • 【Spring】BeanDefinition 深入了解
    1 前言今天想细细研究下BeanDefinition,至于为什么,主要是看了很多遍,没太关注mergedBeanDefinition所以比较好奇,它是干啥的呢?所以得先搞清BeanDefinition,开整。2 源码分析我们得先知道BeanDefinition在Spring这个大框架下是个什么位置。我的理解它就类似于Java中的......
  • 洛谷题单指南-线性表-P3613 【深基15.例2】寄包柜
    原题链接:https://www.luogu.com.cn/problem/P3613题意解读:此题很容易想成用二维数组求解,但是最多有10^5*10^5个寄包柜格子,二维数据会爆空间,题目明确各自一共不超过10^7,所以需要动态数据结构vector。解题思路:vector的问题在于需要提前明确空间大小,才能进行随即访问操作,否则可......
  • 使用 Docker 部署 Fiora 在线聊天室平台
    一、Fiora介绍Fiora简介Fiora是一款开源免费的在线聊天系统。GitHub:https://github.com/yinxin630/fioraFiora功能注册账号并登录,可以长久保存你的数据加入现有群组或者创建自己的群组,来和大家交流和任意人私聊,并添加其为好友多种消息类型,包括文本/表情/图片/......
  • Vue项目中封装axios统一管理http请求
    <divid="content_views"class="markdown_viewsprism-tomorrow-night"><svgxmlns="http://www.w3.org/2000/svg"style="display:none;"><pathstroke-lineca......