linux io多路复用详解,Linux系统中IO多路复用
文章目录
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多路复用相关推荐
- Linux文件关联详解 linux 修改默认文件关联打开程序
linux 修改默认文件关联打开程序 从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式 /.local/share/applications/mimeapps.lis ...
- 详解MTK系统中字符转换问题
详解MTK系统中字符转换问题 2011-09-05 19:02 佚名 互联网 字号:T | T MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文 ...
- linux管道命令详解,Linux系统中的管道命令的用法详解
Linux系统中管道命令是linux系统的一个强大之处.下面由学习啦小编为大家整理了Linux系统中的管道命令的用法详解的相关知识,希望对大家有帮助! Linux系统中的管道命令的用法详解 管道命令操 ...
- linux命令 正则表达式,详解Linux命令中的正则表达式
详解Linux命令中的正则表达式 Mark Do 2017年9月19日 暂无评论 阅读 981 次 命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式 ...
- linux who命令详解,Linux who命令详解
Linux who命令详解教程 Linux who命令详解 功能 显示系统中哪些使用者. 语法 who [options] 参数 参数 描述 options who 命令使用的参数. who命令常用参 ...
- 清理linux服务器缓存,详解Linux手动释放缓存的方法
详解Linux手动释放缓存的方法 发布时间:2020-08-20 07:53:27 来源:脚本之家 阅读:87 作者:闪电王国 栏目:服务器 Linux释放内存的命令: sync echo 1 > ...
- linux sed.写文件,Linux文件处理sed命令-linux sed命令详解-linux sed写入文件-嗨客网
Linux文件处理sed命令详解教程 Linux sed命令使用 Linux sed 命令处理时,把当前处理的行存储在临时缓冲区中,称为 "模式空间"( oattern space ...
- linux的退出tail命令,Linux显示文件最后几行-Linux tail命令详解-Linux tail命令退出-嗨客网...
Linux显示文件最后几行(tail) Linux显示文件最后几行(tail)教程 Linux tail命令详解 功能 查看文件的最后几行. 语法 tail [options] file.. 参数 参 ...
- linux摄像头V4L2 subdev,linux 摄像头驱动 详解linux 摄像头驱动编写
想了解详解linux 摄像头驱动编写的相关内容吗,feixiaoxing在本文为您仔细讲解linux 摄像头驱动的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:linux,摄像头驱动,下面 ...
最新文章
- 怎么对 Java 程序调优?不看别后悔!
- 指向函数的指针 - C语言
- 论文浅尝 | 知识库问答中关系检测的学习表示映射
- 算法练习一:求最小公倍数
- tocmat linux搭建测试环境,Apache+Tomcat 环境搭建(JK部署过程)
- ubuntu内核版本管理
- Android 设置闹铃步骤和基础代码
- 灵魂拷问:你写的SQL一般有几个join ?​
- Devops 05 Jenkins
- 自定义注解实现Excel导入导出
- 解决 python plt画柱状图(棒状图)时横坐标刻度线不在中间而在右边
- html打开无法显示网页怎么回事,Win7打开网页提示“Internet Explorer无法显示该页面”如何解决?...
- 基于MATLAB-GUI数字图像的水果边缘检测
- 制作往图片里插入视频,视频添加到图片上播放
- AppleStore下载量查看
- 2023第十三届“中兴捧月”全球精英挑战赛今日正式启动
- Oracle存储过程基本语法和基础教程
- 使用ISE iMPACT实现一键bit转mcs,bit文件下载,mcs文件下载
- 妹子好不好,只看一个地方!
- 嵌入式C语言编码规范参考
热门文章
- 计算机相关知识小故事,计算机小故事
- 海藻酸钠-peg-羧酸 COOH-PEG-alginate 羧酸修饰海藻酸钠
- Linux-2.6.20的LCD驱动分析
- 从头开始学算法:考研机试题练习(C/C++)–算法初步
- NFS 服务器的搭建
- mysql orderby 规则_MySQL中OrderBy多字段排序规则代码示例
- 【数据结构】什么是内排序、外排序?内排序详细介绍
- KOL营销新战略!小红书品牌破局“内卷”的发力点在哪里?
- vSphere-ESXi
- for /f命令之—Delims和Tokens用法总结