首页 > 其他分享 >IO多路复用基本概念:select,epoll(转)

IO多路复用基本概念:select,epoll(转)

时间:2023-05-14 23:13:05浏览次数:44  
标签:epoll fd IO 用户程序 poll select

原文:https://blog.csdn.net/weixin_45743893/article/details/122970342

IO多路复用概念
IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。
其实就是在单个线程中通过记录跟踪每一个I/O流的状态来管理多个I/O流

它们三的作用
提供一种IO复用的方式。即让单个进程可以监视多个文件描述符,一旦某个fd就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。

fd是什么?

  • fd:文件描述符

文件描述符(file descriptor)是内核为了高效管理这些已经被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符来实现。

 

select
select基于fd_set结构体(一个long类型数组),数组内的每一个元素都与一个fd相关联。select是基于遍历来查找fd事件的,所以时间复杂度为O(n)。

select在监听过程中,每次需要把fd列表从用户态(用户空间?)拷贝到内核态,然后再遍历所有fd,判断有无读写事件发生(这个流程每次调用select都要进行)。这也导致select在监听IO数量较多的情况下,性能开销极大(poll也有这个缺点)

为了减少数据拷贝带来的性能损坏,所以内核对单个进程可监视的fd数量做了限制。

水平触发:如果用户程序没有处理select所报告的fd,则下一次select时会继续报告此fd。

 

poll
poll与select的机制基本一致。由于poll是基于链表存储fd关联的,所以poll没有最大连接数限制。poll也是基于遍历来查找fd事件的,时间复杂度也是O(n)。

水平触发:如果用户程序没有处理poll所报告的fd,则下一次poll时会继续报告此fd。

poll的缺点:

和select一样,每次都把全部fd拷贝进内核态,再从中遍历查找有新事件的fd,性能开销大。


epoll
epoll底层是基于哈希表和回调函数的,所以时间复杂度为O(1)

epoll有两种模式,LT和ET,LT是默认的模式,ET是高速模式。

  • LT模式(水平触发):epoll_wait检测到某fd事件就绪并通知用户程序时,如果用户程序不处理该事件,则每次epoll_wait都会返回这个fd事件,不断提醒用户程序去操作。
  • ET模式(边缘触发):当一个fd里有新的数据变化时,epoll只会向用户程序返回一次报告,直到下次再有新的数据流入之后,才会再次返回报告,无论fd中是否还有数据可读。

epoll的优点:

不会像select或poll那样因为打开的fd过多而影响性能。
没有最大并发限制连接限制。
epoll在监听到fd变化后不必像select或poll那样返回整个fd列表来进行遍历查找,而是只将产生变化的fd(即活跃的fd)放入一个列表中,调用callback函数返回
使用了mmap技术,利用mmap()文件映射内存加速与内核空间的消息传递。
epoll存在的问题:

当活跃连接数过多时可能会有性能问题。
epoll机制需要很多回调函数,在连接数较少的情况下,性能可能不如select和poll

标签:epoll,fd,IO,用户程序,poll,select
From: https://www.cnblogs.com/tan-wm/p/17400507.html

相关文章

  • select poll epoll
    #select  /*select阻塞函数,多次还是需要while,在新建客户端方面有没有都一样因为accept多次也需要while但在判断客户端是否有数据到来方面使用了select就不需要创建多个线程或进程判断了,select可以批量判断*/#include<stdio.h>#include<s......
  • LabVIEW视觉检测源码框架NIVISION机器视觉源码出售送安装工具默认不包含远程服务,远程
    LabVIEW视觉检测源码框架NIVISION机器视觉源码出售送安装工具默认不包含远程服务,远程技术辅导另计,项目代开发软件定值,需要的加好友。保证运行。ID:1266671228910521......
  • LABVIEW可移植的图像处理视觉检测项目源码视觉项目开发NIVISION视觉检测。
    LABVIEW可移植的图像处理视觉检测项目源码视觉项目开发NIVISION视觉检测。ID:4899671488546091......
  • NI LabVIEW OPC Server OPC通讯IO服务器,通讯西门子S720030040012001500SMART通讯三菱F
    NILabVIEWOPCServerOPC通讯IO服务器,通讯西门子S720030040012001500SMART通讯三菱FXPLCQPLC台达PLC欧姆龙PLC等全系列PLCDSCModleNIDSCOPC工具包ID:3460671157181864......
  • APIO2018~2022做题记录
    APIO2018~2022做题记录1.[APIO2021]封闭道路题意:一棵大小为\(n\)的树,有边权,设\(f(x)\)表示要满足所有点的\(deg\leqslantx\)所要删掉的边的边权和的最小值,求出\(f(0)\)到\(f(n)\)思路:先考虑对于每个\(x\)计算答案。设\(dp[i][0/1]\)表示\(i\)向上连的边删或不删时的最小代价......
  • nvim configration
    innvimin~/.config/nvim createa filenamed"init.lua"andadirectorynamedluainluacreatefilesaskeybinding.luabasic.luaplugins.luaand directoryas plugin-config--自动安装Packer.nvim--插件安装目录--~/.local/share/nvim/site/pack/pa......
  • 485转web api服务器框架源码。 集成iot,web api服务,这套带码是通过C#
    485转webapi服务器框架源码。集成iot,webapi服务,这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。带手机app测试demo源码具体具备功能如下:1、具备EF6+mssql数据库功能,可更改为MYSQL或SQLITe.2、自带WEBAPI服务,抛弃IIS支持。用户可以通过WEB前端直接读取远程设备数......
  • OPC转web API服务器框架源码。 集成iot,web api服务,这套带码是通
    OPC转webAPI服务器框架源码。集成iot,webapi服务,这套带码是通过C#编写集成IOCP高性能高并发优势服务器服务源码。带手机app测试demo源码具体具备功能如下:1、具备EF6+mssql数据库功能,可更改为MYSQL或SQLITe.2、自带WEBAPI服务,抛弃IIS支持。用户可以通过WEB前端直接读取远程设备数......
  • fl studio 需要什么配置,flstudio 21如何设置成中文
    FLStudio21是全功能的音乐工作站,漂亮的大混音盘,先进的制作工具,让你的音乐突破想象力的限制。FLStudio21安装前需要先检查现有的系统配置要求是否符合软件要求。flstudio21需要什么配置FLStudiofor21Windows版:Windows7(SP1+platformupdate),Windows8.1或Windows......
  • 合宙esp32c3开发板多软串口及GPIO测试
    合宙esp32c3开发板共引出GPIO口如下:GPIO0~13,GPIO18~21并有如下提示:使用注意事项BOOT(IO09)管脚上电前不能下拉,ESP32会进入下载模式。使用到IO08管脚进行设计,不建议外部直接下拉,因为在下载烧录时,IO08管脚为低电平,不能使用串口进行下载。IO12(GPIO12)、IO13(GPIO13)在QIO模式......