Linux下的五种I/O模型
来源:互联网 发布:植物大战僵尸源码 编辑:程序博客网 时间:2024/06/06 23:29
阻塞I/O
简介
应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。也就是说进程会一直阻塞,直到数据拷贝完成。
模型图示
非阻塞IO模型
简介
非阻塞IO通过进程反复调用IO函数(多次系统调用,并马上返回);也就是说在数据拷贝的过程中,进程是阻塞的。
模型图示
我们把一个SOCKET接口设置为非阻塞就是告诉内核,当所请求的I/O操作无法完成时,不要将进程睡眠,而是返回一个错误。这样我们的I/O操作函数将不断的测试数据是否已经准备好,如果没有准备好,继续测试,直到数据准备好为止。在这个不断测试的过程中,会大量的占用CPU的时间。
IO复用模型
简介
主要是select和epoll;对一个IO端口,两次调用,两次返回,比阻塞IO并没有什么优越性;关键是能实现同时对多个IO端口进行监听。
模型图示
I/O复用模型会用到select、poll、epoll函数,这几个函数也会使进程阻塞,但是和阻塞I/O所不同的的,这两个函数可以同时阻塞多个I/O操作。而且可以同时对多个读操作,多个写操作的I/O函数进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。
信号驱动IO
简介
两次调用,两次返回;
模型图示
首先我们允许套接口进行信号驱动I/O,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。
异步IO模型
简介
数据拷贝的时候进程无需阻塞。
模型图示
当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者的输入输出操作。
5个I/O模型的比较
小结
1.同步IO引起进程阻塞,直至IO操作完成。
2.异步IO不会引起进程阻塞。
3.IO复用是先通过select调用阻塞
- Linux下的五种I/O模型
- Linux下的五种I/O模型
- Linux下的五种I/O模型
- 浅谈Linux下的五种I/O模型
- Linux下的五种I/O模型
- 浅谈Linux下的五种I/O模型
- Linux下的五种I/O模型
- 浅谈Linux下的五种I/O模型
- Linux下的五种I/O模型
- Linux下的五种I/O模型
- Linux下的五种I/O通信模型
- Linux下的五种I/O模型
- Linux的五种I/O模型
- Unix下的五种I/O模型图
- Linux Socket五种I/O模型
- Linux Socket五种I/O模型
- Linux Socket五种I/O模型
- Linux Socket五种I/O模型
- 【HCTF】2015hctf单刷_writeup
- shadowColor 图片阴影 iOS
- mutating的使用(swift2.0)
- Python异常
- 快速排序--过程详解
- Linux下的五种I/O模型
- 使用 AsyncTask 下载图片,并在下载前设置本地图片显示
- Gradle-Eclipse插件安装
- 文件压缩与解压缩
- 隐藏和现实导航栏
- Javascript-类-模块化[面向对象已经无处不在]
- 用例子解释:如何设置CLASSPATH(Java)
- AIM documentation templates
- 响应式web设计