文章目录

1 什么是IO多路复用

1.1 阻塞IO模型

1.2 非阻塞IO模型

1.3 IO复用模型

1.4 信号驱动IO模型

1.5 异步IO模型

2 IO多路复用,epoll

1 什么是IO多路复用

常见的IO模型中,一般有四种,阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型,

我们在去理解IO复用模型之前,首先去理解一下其他的四种IO模型

1.1 阻塞IO模型

阻塞IO模型就是我们在使用BIO去开源socket的时候,通过socket进行accpet,read的时候,都属于阻塞IO模型,他们会直到数据连接到达,以及数据就绪或者发生错误的时候返回。

1.2 非阻塞IO模型

recvfrom 从应用层到内核的时候,如果该缓存区没有数据的时候,就直接返回一个EWOULDBLOCK错误,一般都对非阻塞IO模型进行轮询检查这个状态,看内核是不是有数据到来

1.3 IO复用模型

Linux系统提供 select/poll,进程通过将一个或者多个fd传递给select或者poll系统调用,阻塞在select操作上,这样select/poll可以帮助我们侦测多个fd是否处于就绪状态,select/poll是顺序扫描fd是否就绪,而且支持的fd数量有限,因此使用它受到一些限制,linux还提供了一个epoll系统调用,epoll使用基于事件驱动方式代替顺序扫描,因此性能更高,当有fd就绪时,立即回调rollback函数

1.4 信号驱动IO模型

首先开启套接口信号驱动IO功能,并通过系统调用sigaction执行一个信号处理函数(此系统调用立即返回,进行继续工作,非阻塞的),当数据准备就绪,就为改进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据,并通知主循环处理数据,【不是很明白】

1.5 异步IO模型

告知内核启动某个操作,并让内核在整个操作完成后(包括将数据从内核复制到用户自己的缓存区)通知我们,这种模型与信号驱动模型的主要区别是:信号驱动IO由内核通知我们何时可以开始一个IO操作,异步IO模型由内核通知我们IO操作何时已经完成。

2 IO多路复用,epoll

epoll针对于原始的poll和select技术,做的很大的改进:

1,支持一个进程打开的socket描述符(fd)不受限制(仅受限于操作系统的最大文件句柄数)

2,IO效率不会随着FD数目的增加而线性下降

3,使用mmap加速内核与用户空间的消息传递

linux io多路复用详解,Linux系统中IO多路复用相关推荐

  1. Linux文件关联详解 linux 修改默认文件关联打开程序

    linux 修改默认文件关联打开程序 从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式 /.local/share/applications/mimeapps.lis ...

  2. 详解MTK系统中字符转换问题

    详解MTK系统中字符转换问题 2011-09-05 19:02 佚名 互联网 字号:T | T MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文 ...

  3. linux管道命令详解,Linux系统中的管道命令的用法详解

    Linux系统中管道命令是linux系统的一个强大之处.下面由学习啦小编为大家整理了Linux系统中的管道命令的用法详解的相关知识,希望对大家有帮助! Linux系统中的管道命令的用法详解 管道命令操 ...

  4. linux命令 正则表达式,详解Linux命令中的正则表达式

    详解Linux命令中的正则表达式 Mark Do 2017年9月19日 暂无评论 阅读 981 次 命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式 ...

  5. linux who命令详解,Linux who命令详解

    Linux who命令详解教程 Linux who命令详解 功能 显示系统中哪些使用者. 语法 who [options] 参数 参数 描述 options who 命令使用的参数. who命令常用参 ...

  6. 清理linux服务器缓存,详解Linux手动释放缓存的方法

    详解Linux手动释放缓存的方法 发布时间:2020-08-20 07:53:27 来源:脚本之家 阅读:87 作者:闪电王国 栏目:服务器 Linux释放内存的命令: sync echo 1 > ...

  7. linux sed.写文件,Linux文件处理sed命令-linux sed命令详解-linux sed写入文件-嗨客网

    Linux文件处理sed命令详解教程 Linux sed命令使用 Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 "模式空间"( oattern space ...

  8. linux的退出tail命令,Linux显示文件最后几行-Linux tail命令详解-Linux tail命令退出-嗨客网...

    Linux显示文件最后几行(tail) Linux显示文件最后几行(tail)教程 Linux tail命令详解 功能 查看文件的最后几行. 语法 tail [options] file.. 参数 参 ...

  9. linux摄像头V4L2 subdev,linux 摄像头驱动 详解linux 摄像头驱动编写

    想了解详解linux 摄像头驱动编写的相关内容吗,feixiaoxing在本文为您仔细讲解linux 摄像头驱动的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:linux,摄像头驱动,下面 ...

最新文章

  1. 怎么对 Java 程序调优?不看别后悔!
  2. 指向函数的指针 - C语言
  3. 论文浅尝 | 知识库问答中关系检测的学习表示映射
  4. 算法练习一:求最小公倍数
  5. tocmat linux搭建测试环境,Apache+Tomcat 环境搭建(JK部署过程)
  6. ubuntu内核版本管理
  7. Android 设置闹铃步骤和基础代码
  8. 灵魂拷问:你写的SQL一般有几个join ?​
  9. Devops 05 Jenkins
  10. 自定义注解实现Excel导入导出
  11. 解决 python plt画柱状图(棒状图)时横坐标刻度线不在中间而在右边
  12. html打开无法显示网页怎么回事,Win7打开网页提示“Internet Explorer无法显示该页面”如何解决?...
  13. 基于MATLAB-GUI数字图像的水果边缘检测
  14. 制作往图片里插入视频,视频添加到图片上播放
  15. AppleStore下载量查看
  16. 2023第十三届“中兴捧月”全球精英挑战赛今日正式启动
  17. Oracle存储过程基本语法和基础教程
  18. 使用ISE iMPACT实现一键bit转mcs,bit文件下载,mcs文件下载
  19. 妹子好不好,只看一个地方!
  20. 嵌入式C语言编码规范参考

热门文章

  1. 计算机相关知识小故事,计算机小故事
  2. 海藻酸钠-peg-羧酸 COOH-PEG-alginate 羧酸修饰海藻酸钠
  3. Linux-2.6.20的LCD驱动分析
  4. 从头开始学算法:考研机试题练习(C/C++)–算法初步
  5. NFS 服务器的搭建
  6. mysql orderby 规则_MySQL中OrderBy多字段排序规则代码示例
  7. 【数据结构】什么是内排序、外排序?内排序详细介绍
  8. KOL营销新战略!小红书品牌破局“内卷”的发力点在哪里?
  9. vSphere-ESXi
  10. for /f命令之—Delims和Tokens用法总结