IO模型《六》IO模型比较分析
2024-08-27 01:37:50
IO模型比较分析
到目前为止,已经将四个IO Model都介绍完了。现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪。
先回答最简单的这个:blocking vs non-blocking。前面的介绍中其实已经很明确的说明了这两者的区别。调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kernel还准备数据的情况下会立刻返回。
再说明synchronous IO和asynchronous IO的区别之前,需要先给出两者的定义。Stevens给出的定义(其实是POSIX的定义)是这样子的:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operationcompletes;
An asynchronous I/O operation does not cause the requesting process to be blocked;
两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义,四个IO模型可以分为两大类,
之前所述的blocking IO,non-blocking IO,IO multiplexing都属于synchronous IO这一类,而 asynchronous I/O后一类 。
有人可能会说,non-blocking IO并没有被block啊。这里有个非常“狡猾”的地方,定义中所指的”IO operation”是指真实的IO操作,
就是例子中的recvfrom这个system call。non-blocking IO在执行recvfrom这个system call的时候,如果kernel的数据没有准备好,
这时候不会block进程。但是,当kernel中数据准备好的时候,recvfrom会将数据从kernel拷贝到用户内存中,这个时候进程是被block了,
在这段时间内,进程是被block的。而asynchronous IO则不一样,当进程发起IO 操作之后,就直接返回再也不理睬了,直到kernel发送一个信号,
告诉进程说IO完成。在这整个过程中,进程完全没有被block。
各个IO Model的比较如图所示:
经过上面的介绍,会发现non-blocking IO和asynchronous IO的区别还是很明显的。在non-blocking IO中,虽然进程大部分时间都不会被block,但是它仍然要求进程去主动的check,并且当数据准备完成以后,也需要进程主动的再次调用recvfrom来将数据拷贝到用户内存。而asynchronous IO则完全不同。它就像是用户进程将整个IO操作交给了他人(kernel)完成,然后他人做完后发信号通知。在此期间,用户进程不需要去检查IO操作的状态,也不需要主动的去拷贝数据。
最新文章
- grunt配置任务
- Sensitive directory/file Integrity Monitoring and Checking
- [Machine Learning &; Algorithm]CAML机器学习系列2:深入浅出ML之Entropy-Based家族
- javascript数据结构与算法---栈
- super()和this()的区别
- 最近写了一个红包雨的小功能,但感觉自己的js还有很多地方可以提高,望大神们可以帮忙指点一二
- ajax步骤和理解
- HTML5跨文档消息传递
- 博弈论(男人八题):POJ 1740 A New Stone Game
- sql 视图 按where条件多个字段取一个 分类: SQL Server 2014-12-01 14:09 308人阅读 评论(0) 收藏
- 【转】数据库分页Java实现
- 手机QQ v4.2 有感
- [国嵌攻略][070][GDB调试程序]
- Python CGI编程
- C# cmd调用外部命令
- 性能测试三十八:Java性能分析神器-JProfiler安装和简单介绍
- 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)
- 南阳ACM8-一种排序
- Dictionary字典类介绍
- TCP 三次握手过程详解
热门文章
- KVM镜像image 转换 调整
- spring 采用编程式事务
- python's unittest
- 解剖Nginx·自动脚本篇(2)设置初始变量脚本 auto/init
- Nginx 相关介绍(Nginx是什么?能干嘛?个人觉得写得比较好的文章,转载过来)
- 这几天用高通VUFORIA的体会
- Io 异常: The Network Adapter could not establish the connection解决方案
- hadoop开发环境部署——通过eclipse远程连接hadoop2.7.3进行开发
- CloudStack 注册模板脚本分析
- Solidity oraclize解析Json格式数据