IO复用技术

news2024/12/23 12:41:03

一、I/O复用的介绍

  • I/O复用是一种能够同时处理多个I/O操作的技术,适用于高并发场景。
  • 使用场景
  • select/poll:适用于连接数较少的场景。
  • epoll:适用于大规模的网络服务,如Web服务器。

二、实现方式

1.select
  • select 是一种系统调用,用于监视多个文件描述符的状态。
  • 使用方式:
    • int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  • timeout参数用于设置超时时间,超时后返回0。

select的缺点

  • 最大文件描述符数量限制(一般为1024)。
  • 返回的文件描述符集合需要遍历,时间复杂度为O(n)。
2.poll

poll的基本概念

  • poll与select类似,是一种用于监控多个文件描述符的I/O方法。
  • 使用方式:
    • int poll(struct pollfd *fds, nfds_t nfds, int timeout);
  • poll的缺点:
    • 需要遍历所有监视的文件描述符,时间复杂度为O(n)。
3. epoll

epoll的基本概念

  • epoll是Linux特有的I/O复用方法,优化了select和poll的性能。
  • 使用方式:
    • epoll_create 创建一个epoll实例。
    • epoll_ctl 用于添加、修改或删除文件描述符。
    • epoll_wait 用于等待事件的发生。

epoll的优点

  • 支持大规模并发,时间复杂度为O(1)。
  • 可以同时监视多个文件描述符,适合高并发场景。

三、select、poll和epoll的区别

        1.描述符上限:select 的文件描述符数量通常有限制(一般为1024),而 poll 和 epoll 对文件描述符的数量没有限制。

        2.数据结构传递方式:select 在每次调用时需要将所有注册的文件描述符集合复制到内核中;poll 则使用一个 pollfd 数组来传递数据,仍需在每次调用时进行复制;相比之下,epoll 维护内核中的红黑树和双向链表,仅在有事件发生时进行处理,避免了不必要的复制。

        3.性能开销:select 因为需要多次进行内核态切换,表现出较高的性能开销;poll 的性能开销稍微较低,但仍需切换用户态与内核态;而 epoll 的开销最低,仅在事件发生时切换,能显著减少不必要的性能损耗。

        3.时间复杂度:在 select 和 poll 中,处理的复杂度都是 O(n),需要遍历所有注册的文件描述符;而在 epoll 中,复杂度则降低为 O(K),仅需要遍历就绪事件的数量,提升了效率。 适用场景:select 和 poll 适合处理较少的文件描述符,而 epoll 更适合处理大量并发连接,能够提供更好的性能。

        4.支持边缘触发:epoll 支持边缘触发模式,而 select 和 poll 则不支持这种机制。

        5.返回就绪事件的数量:poll 返回就绪的文件描述符数量,epoll 通过回调机制或事件循环返回就绪事件,相比之下更灵活高效。

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

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

相关文章

iPhone突然黑屏?别慌,这里有你的自救指南

在日常使用iPhone的过程中,不少用户可能会遇到手机突然黑屏的情况,这往往让人措手不及。别担心,今天我们就来详细探讨一下iPhone突然黑屏的可能原因及解决方法,帮助你快速恢复手机的正常使用。 一、iPhone突然黑屏的可能原因 1. …

在做结果集封装时,若结果集表头与成员变量名不一致该如何解决?

目录 1. 通过别名映射为一致:as子句 2. 使用resultMap 3. 在配置文件中开启适配规则 在Score实体类中,我们定义了studentId、courseId、score、status,而在数据库中,我们设置如下: 1. 通过别名映射为一致&#xff1…

GAMES202——作业1 实时阴影(ShadowMap,PCF,PCSS)

目录 任务 ShadowMap PCF PCSS 实现 ShadowMap useShadowMap PCF findBlocker PCSS 结果 任务 ShadowMap 1.在 ShadowMaterial.js 中需要向 Shader 传递正确的 uLightMVP 矩阵,该矩阵参与了第一步从光源处渲染场景从而构造ShadowMap 的过程。 你需要完成 D…

4 - ZYNQ 信号、接口与引脚

文章目录 1 ZYNQ信号、接口与引脚1.1 电源引脚1.2 PS信号引脚1.3 PL信号引脚1.4 PS和PL交互接口 1 ZYNQ信号、接口与引脚 ZYNQ的信号、接口与引脚如下图所示,主要分为: PS部分PL部分PS和PL交互部分PS和PL共用部分(如JTAG) 1.…

Disassembly窗口信息解读

如上图程序所示,程序运行流程为: 1.跳转至main所在地址 2.加载全局变量counter地址??main_2到R0 3.将变量值存入R0 4.R0自增指令载入 5.加载counter地址到R1 6.通过R1的地址,R0取到counter的值 ??main_1最终结果R0存值&#xff0c…

常用工具网站之Emoji

https://www.emojiall.com/zh-hans/all-emojis 这个网站是一个收集和展示所有表情符号的网站。用户可以在这里找到各种不同类型的表情符号,并了解它们的含义和用法。 举例说明:在这个网站上,可以找到不同类型的奖牌表情符号,例如…

谈到这个痛点,写C的和不写C的码农都沉默了

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2246.html 作为一名在计算机软件行业工作的C工程师,我深知在高要求的内存管理环境中工作有多么艰难。内存分配与优化、避免内存泄漏,都是日常挑战…

Scrapy入门学习

文章目录 Scrapy一. Scrapy简介二. Scrapy的安装1. 进入项目所在目录2. 安装软件包Scrapy3. 验证是否安装成功 三. Scrapy的基础使用1. 创建项目2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件3.运行爬虫4.利用css选择器Scrapy Shell提取数据例如: Scrapy 一. Scrapy…

2024谷歌开发者大会分享

前言: google一般会在每年的5月份在美国举行开发者大会,然后8-9月份会在中国也举办一次开发者大会,内容主题纲要是一致的,但是由于中国剧本的时间稍微晚一些,所以其内容会更新一些。 每年的开发者大会,会隐…

跟着B站前端面试总结回顾前端基础知识(二)

深拷贝与浅拷贝 在JavaScript中,深拷贝是一个常见的需求,特别是在处理复杂数据结构(如对象、数组等)时,需要确保原始数据不被修改。下面通过表格形式列出几种常见的深拷贝方法,并简要说明其优缺点。 方法…

【AI模型:追求全能还是专精?】

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 目录 引言 ​编辑 一:AI模型的全面评估和比较 二:AI模型的专精化和可扩展性…

宝塔安装yasd 远程调试 swoole

一、服务器安装yasd 1.安装yasd 按照官方文档,Yasd调试器官方文档 yum install boost boost-develgit clone https://github.com/swoole/yasd.gitcd yasdphpize --clean && phpize && ./configure --with-php-config/www/server/php/74/bin/php…

筛质数(线性筛法)

线性筛法: 假设有一个非质数 x,那么这个数可以被表示为一个最小质因数和一个因子相乘的形式 如 x 12 ,那么 x 2*6 其中:2 就是 12 的最小质因数, 6 就是另一个因子 线性筛法就是利用每个数的最小质因数筛掉这个非…

做谷歌seo花钱多吗?

一分钱一分货,哪怕你是自己一个人做谷歌seo,服务器,域名的成本也是成本,当然,花费可能还少,但其中的时间精力,以及有没有效果,你大可自己掂量一下 你如果只是想随便做做,…

SSM框架之Mybatis框架

前言 什么是框架? 框架就是对技术的封装,将基础的技术进行封装,便于程序员使用,提高开发效率 ssm框架是什么? ssm包括spring、springMvc、Mybatis,是后端企业级开发时会使用到的框架组合,在…

python实战一:合并多个Excel中数据

看不懂可以跟着视频学一下,关于基础课程项目也可以私聊我! 视频源码: 链接:https://pan.quark.cn/s/2055653f735b 之前我们已经学习了如何读取和写入Execl数据,今天我们来用一个实例来进行表格的合并。如下是 2021年…

离散数学中的逻辑基础(1)

目录 引言 1. 命题及其逻辑运算 2. 逻辑等价与范式 3. 逻辑推理规则 4. 逻辑问题练习 5. 总结 引言 逻辑是离散数学的核心概念之一,它用于精确描述数学命题并分析其关系。逻辑不仅是数学证明的基础,也是计算机科学中算法设计和编程的基石。本篇文…

【STM32】STM介绍

一、嵌入式与STM32 1.嵌入式 除了桌面PC之外,所有的控制类设备,都称之嵌入式。 1 ARM概述 1.1 历史 1978年,物理学家赫尔曼豪泽(Hermann Hauser)和工程师Chris Curry,在英国剑桥创办了CPU公司&#xff…

识别不到开发板串口问题(故事版)

最近电脑重新刷机了,很多东西都没了,很伤心。但也是锻炼自己基本功的能力。 我在用vscode开发ESP32的时候,发现一直识别不到串口,很纳闷,以为笔记本端口坏了? 转念一想觉得是因为没有加驱动 当时下面有一…

大模型学习应用 3: AutoDL 平台 transformers 环境搭建及模型部署使用(持续更新中)

之前我们学习了在和鲸的预配置好的平台上进行学习,在工作中并不现实,本期我们的目标是将已有模型部署到云端进行运行 配置环境:RTX 4090D(24GB) python 3.12(ubuntu22.04) 参考文章:AutoDL平台transformers环境搭建 目录 注册及选择算力新建…