当前位置: 首页 > news >正文

操作系统IO多路复用select,poll,epoll

什么是文件描述符fd

文件描述符是一个非负整数,是进程用于标识打开文件或I/O 资源的索引
在 Linux 系统中,当进程通过系统调用,打开一个文件创建一个新的 I/O 资源时,内核会为其分配一个唯一的文件描述符,进程通过这个文件描述符来对相应的文件或资源进行读写、控制等操作

IO多路复用

在计算机系统中,I/O 操作指的是计算机与外部设备之间的数据传输过程。
“多路” 指的是多个文件描述符(即多个 I/O 资源),“复用” 表示使用同一个线程或进程来监控和处理多个文件描述符的 I/O 事件。(避免为每个 I/O 操作创建一个单独的线程或进程,从而提高系统资源的利用率。)
核心是通过一种机制,让进程能够同时监视多个文件描述符的状态变化,当其中某个或某些文件描述符上有可读、可写或其他事件发生时,进程能够得到通知,并及时对这些事件进行处理。这样,进程就可以在单线程或单进程中管理多个 I/O 操作,而不需要阻塞在某个特定的 I/O 操作上等待其完成。

IO多路复用的实现方式

select

监视一组文件描述符,将集合传给内核,内核会遍历检查是否有事件发生。缺点:数量有限;数量大时效率低。

poll

与select相似,但数量无限。缺点:高并发场景下依然效率低。

epoll

linux特有。使用事件通知的方式,只有在文件描述符就绪时才会通知应用程序,而不需要应用程序轮询。
当有事件发生时,它会返回并告诉进程哪些文件描述符上有事件,而且只返回有事件发生的文件描述符,不需要遍历所有的文件描述符。
适用于高并发的网络服务器等场景。

相关文章:

  • 英语词性--介词
  • 基于springboot的网上订餐系统(006)
  • python:music21 与 AI 结合应用探讨
  • Unity Enlighten与Progressive GPU Lightmapper对比分析
  • 清晰易懂的 PHP 安装与配置教程
  • 【蓝桥杯速成】| 7.01背包练习生
  • Framebuffer应用编程
  • 科研项目验收管理系统
  • Node.js系列(5)--数据库操作指南
  • 引用拷贝、浅拷贝和深拷贝
  • Pytorch使用手册—自定义 C++ 和 CUDA 运算符(专题五十一)
  • 12、Linux中如何查看一个进程,如何杀死一个进程,如何查看某个端口有没有被占用【中高频】
  • 供应链与生产制造L1L4级高阶流程规划框架(53页PPT)(文末有下载方式)
  • 关于redis中的分布式锁
  • VUE+element 在组件内有多个el-dialog同时打开时,遮罩会叠加
  • IntelliJ IDEA 中 Git 高频问题与操作详解|新手避坑指南
  • 移动最小二乘法(Moving Least Squares, MLS)原理和c++实现
  • 网络空间安全(36)数据库权限提升获取webshell思路总结
  • Arduino示例代码讲解:Melody 旋律
  • 虚拟地址空间(下)进程地址空间(上)
  • 乐聚创始人:人形机器人当前要考虑泡沫问题,年底或将进入冷静期
  • 预热苏杯,“谁羽争锋”全国新闻界羽毛球团体邀请赛厦门开赛
  • 这个器官健康的人,不容易得抑郁症
  • 人民论坛:是民生小事,也是融合大势
  • 中国田协通报苏州马拉松“方便门”处理情况:涉事10人禁赛3年
  • 我国民营经济首季运行向新向好,对国民经济发展形成有力支撑