JavaShuo
栏目
标签
五种IO模型介绍和对比
时间 2019-11-24
标签
五种
模型
介绍
对比
繁體版
原文
原文链接
前言
unix提供的IO模型有几种,分别有哪些?
各类IO模型的特色是什么?他们有什么区别?
阻塞,非阻塞,同步,异步的区别?
epoll为何高效?
概述
普通输入操做包含的步骤
等待数据准备好
从内核向进程复制数据
网络数据输入包含的步骤
等待数据从网络送达,到达后被复制到内核缓冲区
把数据从内核缓冲区复制到应用程序缓冲区
IO模型介绍
阻塞式IO
使用系统调用,并一直阻塞直到内核将数据准备好,以后再由内核缓冲区复制到用户态,在等待内核准备的这段时间什么也干不了
下图函数调用期间,一直被阻塞,直到数据准备好且从内核复制到用户程序才返回,这种IO模型为阻塞式IO
阻塞式IO式最流行的IO模型
非阻塞式IO
内核在没有准备好数据的时候会返回错误码,而调用程序不会休眠,而是不断轮询询问内核数据是否准备好
下图函数调用时,若是数据没有准备好,不像阻塞式IO那样一直被阻塞,而是返回一个错误码。数据准备好时,函数成功返回。
应用程序对这样一个非阻塞描述符循环调用成为轮询。
非阻塞式IO的轮询会耗费大量cpu,一般在专门提供某一功能的系统中才会使用。经过为套接字的描述符属性设置非阻塞式,可以使用该功能
IO多路复用
相似与非阻塞,只不过轮询不是由用户线程去执行,而是由内核去轮询,内核监听程序监听到数据准备好后,调用内核函数复制数据到用户态
下图中select这个系统调用,充当代理类的角色,不断轮询注册到它这里的全部须要IO的文件描述符,有结果时,把结果告诉被代理的recvfrom函数,它本尊再亲自出马去拿数据
IO多路复用至少有两次系统调用,若是只有一个代理对象,性能上是不如前面的IO模型的,可是因为它能够同时监听不少套接字,因此性能比前二者高
多路复用包括:
select:线性扫描全部监听的文件描述符,无论他们是否是活跃的。有最大数量限制(32位系统1024,64位系统2048)
poll:同select,不过数据结构不一样,须要分配一个pollfd结构数组,维护在内核中。它没有大小限制,不过须要不少复制操做
epoll:用于代替poll和select,没有大小限制。使用一个文件描述符管理多个文件描述符,使用红黑树存储。同时用事件驱动代替了轮询。epoll_ctl中注册的文件描述符在事件触发的时候会经过回调机制激活该文件描述符。epoll_wait便会收到通知。最后,epoll还采用了mmap虚拟内存映射技术减小用户态和内核态数据传输的开销
信号驱动式IO
使用信号,内核在数据准备就绪时经过信号来进行通知
首先开启信号驱动io套接字,并使用sigaction系统调用来安装信号处理程序,内核直接返回,不会阻塞用户态
数据准备好时,内核会发送SIGIO信号,收到信号后开始进行io操做
异步IO
异步IO依赖信号处理程序来进行通知
不过异步IO与前面IO模型不一样的是:前面的都是数据准备阶段的阻塞与非阻塞,异步IO模型通知的是IO操做已经完成,而不是数据准备完成
异步IO才是真正的非阻塞,主进程只负责作本身的事情,等IO操做完成(数据成功从内核缓存区复制到应用程序缓冲区)时经过回调函数对数据进行处理
unix中异步io函数以aio_或lio_打头
各类IO模型对比
前面四种IO模型的主要区别在第一阶段,他们第二阶段是同样的:数据从内核缓冲区复制到调用者缓冲区期间都被阻塞住!
前面四种IO都是同步IO:IO操做致使请求进程阻塞,直到IO操做完成
异步IO:IO操做不致使请求进程阻塞
参考
《unix网络编程》第一卷
编程
相关文章
1.
五种IO模型介绍和对比
2.
Unix的五种IO模型介绍
3.
Redis 五种io模型介绍
4.
五种IO模型
5.
五种IO/模型
6.
IO五种模型
7.
IO概念和五种IO模型
8.
这些IO模型你都知道吗 - 五种常见IO模型介绍
9.
IO模型介绍
10.
io模型介绍
更多相关文章...
•
PHP 类型比较
-
PHP教程
•
ASP.NET MVC - 模型
-
ASP.NET 教程
•
Java Agent入门实战(一)-Instrumentation介绍与使用
•
委托模式
相关标签/搜索
介绍
IO模型探讨
五种
对比
比对
模型
简要介绍
据介绍
01-介绍
XLink 和 XPointer 教程
NoSQL教程
PHP 7 新特性
设计模式
委托模式
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
NLP《词汇表示方法(六)ELMO》
2.
必看!RDS 数据库入门一本通(附网盘链接)
3.
阿里云1C2G虚拟机【99/年】羊毛党集合啦!
4.
10秒钟的Cat 6A网线认证仪_DSX2-5000 CH
5.
074《从零开始学Python网络爬虫》小记
6.
实例12--会动的地图
7.
听荐 | 「谈笑风声」,一次投资圈的尝试
8.
阿里技术官手写800多页PDF总结《精通Java Web整合开发》
9.
设计模式之☞状态模式实战
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
五种IO模型介绍和对比
2.
Unix的五种IO模型介绍
3.
Redis 五种io模型介绍
4.
五种IO模型
5.
五种IO/模型
6.
IO五种模型
7.
IO概念和五种IO模型
8.
这些IO模型你都知道吗 - 五种常见IO模型介绍
9.
IO模型介绍
10.
io模型介绍
>>更多相关文章<<