linux下的五种io模型,Linux下的五种IO模型
Java中提供的IO有关的API,在文件处理的时候,其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装,可见我的另一篇博客)
开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型,见下图
接下来一一讲解这5种模型
阻塞型IO:最简单的一种IO模型,简单理解就是死等,即进程或线程一直等待莫格条件,不满足则一直等待。
非阻塞型IO:应用进程与内核交互,目的未达到之前会直接返回,然后不断轮询,不停的去问内核数据是否准备好?如果发现准备好了,那就把数据拷贝到用户空间中。应用进程通过 recvfrom 调用不停的去和内核交互,直到内核准备好数据。如果没有准备好,内
核会返回error,应用进程在得到error后,过一段时间再发送recvfrom请求。在两次发送请求的时间段,进程可以先做别的事情。
信号驱动IO:我们会发现非阻塞型IO方式一遍一遍的轮询不如等内核把数据准备好,然后通知进程,当进程收到该通知时,便开始把数据拷贝到用户空间中。 即应用进程预先向内核注册一个信号处理函数,然后用户进程返回,并不阻塞,当内核数据准备就绪时会发送一个信号给进程,用户进程便在信号处理函数中开始把数据拷贝到用户空间中
IO复用模型:顾名思义,即将多个进程I/0注册到同一管道上,这里管道会统一和内核交互。当管道中的某一个请求需要好的数据准备好之后,进程再把对应的数据拷贝到用户空间中。 I/O多路转接是多了一个Select函数,多个进程的IO可以注册到同一个Select中,用户调用该Select。Select会监听所有注册好的I/O,如果所有被监听的I/O需要的数据都没有准备好,Select调用进程会阻塞。当任意一个I/O所需要的数据准备好之后,Select调用就
会返回,然后进程再通过recvfrom来进行数据拷贝。但实际上,它并未向内核注册信号处理函数,所以它并不是非阻塞的。
看到开篇的那张图,大家肯定会有疑问,为什么之前的这四种模型都是同步的呢?因为无论以上哪种模型,真正的数据拷贝过程都是同步的(自己的理解便是:所有的数据拷贝过程都是用户进程手动执行的)
那么我们来看真正异步执行的I/O模型:
异步I/O模型:应用进程把I/O请求传给内核后,完全由内核去操作文件拷贝。内核完成相关操作后,会发信号告诉应用进程本次I/O已经完成。用户进程发起aio_read操作之后,给内核传递描述符、缓冲区指针、缓冲区大小等,告诉内核进程当整个操作完成时,如何通知进程,然后就立刻去做其他事儿了。当内核收到aio_read后,会立刻返回,然后内核开始等待数据准备,数据准备好以后,直接把数据拷贝到用户控件,然后再通知进程本次IO已经完成。
各个模型的执行流程比较图如下图所示
linux下的五种io模型,Linux下的五种IO模型相关推荐
- linux的socket模型有哪些,异步io 编程 Linux Socket五种I/O模型(zhuan(3)
需要说明的是并非所有的Windows SocketsAPI在非阻塞模式下调用,都会返回WSAEWOULDBLOCK错误.例如,以非阻塞模式的套接字为参数调用bind()函数时,就不会返回该错误代码.当 ...
- linux的open的非组赛,Linux下的非阻塞IO库epoll
今天看到一篇文章,对于epoll讲解的非常生动清晰,转载收藏一下,原文请点击here. 生活中的一个例子 假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但是不知道你具体住在哪里, ...
- 基础服务器 IO 模型 Proactor 模型 Reactor 模型 IO 多路复用 异步 IO 模型 Linux 服务器开发 网络编程服务器模型
本文主要记录服务器的 IO 模型的类型(从多路复用,异步 IO 讲到 Proactor Reactor 模型),包括 Real World nginx 和 apache ,kafka 等分析,配备自洽 ...
- linux下java写ftp服务器端,在Linux下部署网站(java环境部署)第五章 FTP服务器搭建...
第五章 FTP服务器搭建 1.看看是否已经安装FTP服务器 service vsftpd start ftp localhost 如果不认识ftp命令是因为没有安装ftp的client包,需要拿安装光 ...
- linux 最快的,五种方式装Linux哪种最快
mask宇 于 2012-05-20 00:46:44发表: 个人觉得硬盘的传输速率更快 所以悬着硬盘. Hoo_h 于 2012-05-20 00:18:54发表: 想尝试硬盘安装,用过光盘和U盘 ...
- linux 清空catalina.out日志 不需要重启tomcat(五种方法)【转】
1.重定向方法清空文件 [root@localhost logs]# du -h catalina.out 查看文件大小 17M catalina.out [root@localhost logs] ...
- linux系统可以用autocad吗,在Linux操作系统下最佳的五款CAD软件
以下为你介绍在 Linux 操作系统下最佳的五款 CAD(计算机辅助设计) 软件,部分附有在 Ubuntu 下的安装命令,是很多工程流程中不能缺少的一部分,CAD 常用于建筑.汽车零件设计.航天飞机研 ...
- linux服务器清除cdn,Linux服务器中查找并删除大文件的五种方法,Linux系统清除文件内容的命令分享...
很多时候,在处理Linux终端中的文件时,您可能希望清除文件的内容,而无需使用任何Linux命令行编辑器打开它.怎么能实现这一目标?在本文中,我们将借助一些有用的命令,通过几种不同的方式清空文件内容. ...
- linux+Qt 下利用D-Bus进行进程间高效通信的三种方式
linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...
最新文章
- 阿里平头哥会和AMD一样成为令英特尔头痛的存在吗?
- php项目包导入项目,zend studio导入项目文件的图文操作
- Deepin v20依赖错误,检测更新失败解决办法
- Oracle数据库文件恢复与备份思路
- 机器学习中的数学知识(part3)--凸优化
- poj 2486 树形dp
- vba 正则表达式_VBA中正则表达式与数组结合的应用案例!
- 10.C++-构造函数初始化列表、类const成员、对象构造顺序、析构函数
- 走进COM组件系列(一)
- Angular官方教程采坑
- HTML在线visio进行简单布局,visio2007教程
- windows权限提升——烂土豆+dll劫持+引号路径+服务权限
- python winrar 密码_python+winrar 指令压缩文件
- html5 拖拽 编辑 插件,超给力 Vue.js 可视化H5拖拽编辑器Quark-H5
- 游戏运营杂谈之------达克效应的启示
- 一个好玩的小游戏——麻神之战
- angular学习-数据绑定
- 部分互联网公司及通信公司校招时间表及薪资(参考2017)
- 青岛方言发音对照表(内附英文释义)
- 高数之 左右极限求法
热门文章
- 安卓跑linux程序_Android下运行Linux可执行程序
- 高斯信道、单径Rayleigh信道和多径衰落信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)
- 【Error】IDEA报错:org.jetbrains.jps.builders.java.dependencyView.TypeRepr$PrimitiveType cannot be cast t
- linux shm_open,c – 如何更改shm_open路径?
- ListView常用属性、方法
- MySQL(一)基础操作
- 20155330 2016-2017-2 《Java程序设计》第五周学习总结
- 记录踩过的坑——代理IP
- 【JSP】JSP与oracle数据库交互案例
- [003]容器和动态数组的使用