关于异步IO与同步IO的写操作区别
最近这两天都在看IO相关的知识点.一开始太凌乱,太杂,不过终于整理清楚了.觉得杂乱是因为一开始以为异步IO等于非阻塞IO,这完全是两个概念,
LINUX下的异步IO有两类,一类为glibc AIO,这类AIO是通过线程回调模拟,没细究;另一类是native AIO,是LINUX内核支持的,但只支持直接IO技术,关于直接IO技术.这里哆嗦两句,在一般情况下LINUX进行write系统调用时,通常是采用的延迟写入机制.在内核空间,有一个IO缓冲区,主要用来存储用户的写入数据,write系统调用成功返回时,只能够确定是将数据写入了这个页中(并将该页标记为脏页,内核会定期或不定期将脏页的数据刷新进具体的磁盘上).手动同步到具体硬件上可以用fsync或者sync系统调用,这里就不多说了.针对于写操作来说.同步IO与异步IO的具体流程为:
同步: write-->内核缓冲页-->内核定时或不定期刷新至磁盘中
异步 write-->提交写请求给内核-->由内核通过自己的调度算法将写操作具象出来
从这里可以看出来,对于写操作,不管是同步,还是异步,write调用都可以立即返回,不存在IO等待,但是通过这篇文章http://blog.csdn.net/youbingchen/article/details/51769042中的小结
注意:Linux内核级别的文件异步I/O是不支持缓存操作的,也就是说,即使需要操作的文件块在Linux文件缓存存在,也不会通过读取、更改缓存中的文件块来代替实际对磁盘的操作。目前,Nginx仅支持在读取文件时使用异步I/O,因为正常写入文件时往往是写入内存中就 立刻返回,而使用异步I/O写入时速度会明显下降
异步写反而会降低效率.原因应该是直接IO所导致的,比如同时写入操作10万次,如果用的同步IO,写入缓存页的方式,实际的真正IO操作肯定是少于10万,而异步IO就会真正执行10万.
异步IO应该主要是针对字符设备,如键盘等不知道什么时候会有数据来的情况,效果更好.不过在实际开发过程中.用到异步IO的地方真是太少太少了.
关于异步IO与同步IO的写操作区别的更多相关文章
- windows核心编程---第九章 同步设备IO与异步设备IO之同步IO
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
- 阻塞IO、非阻塞IO、同步IO、异步IO等
https://www.cnblogs.com/zingp/p/6863170.html 阅读目录 1 基础知识回顾 2 I/O模式 3 事件驱动编程模型 4 select/poll/epoll的区别 ...
- 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
POSIX 同步IO.异步IO.阻塞IO.非阻塞IO,这几个词常见于各种各样的与网络相关的文章之中,往往不同上下文中它们的意思是不一样的,以致于我在很长一段时间对此感到困惑,所以想写一篇文章整理一下. ...
- 阻塞IO与非阻塞IO、同步IO与异步IO
在学习nodejs时,了解到nodejs的一个重要特征是非阻塞IO,且nodejs中的所有IO都是异步的.既然有非阻塞IO.异步IO,那么必然就有阻塞IO.同步IO了,为了彻底搞清楚这几个概念,在网上 ...
- IO模型浅析-阻塞、非阻塞、IO复用、信号驱动、异步IO、同步IO
最近看到OVS用户态的代码,在接收内核态信息的时候,使用了Epoll多路复用机制,对其十分不解,于是从网上找了一些资料,学习了一下<UNIX网络变成卷1:套接字联网API>这本书对应的章节 ...
- 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
- 理解同步/异步/阻塞/非阻塞IO区别
5种IO模型 1.阻塞式I/O模型 阻塞I/O(blocking I/O)模型,进程调用recvfrom,其系统调用直到数据报到达且被拷贝到应用进程的缓冲区中或者发生错误才返回.进程从调用recvfr ...
- 同步IO, 异步IO的理解
1. 什么是IO? 在计算机中无时无刻不存在着对数据的访问和读取(数据都存储在物理的媒介上,例如寄存器,高速缓存,内存,磁盘,网卡等等),这些操作被称为IO. 2. 阻塞IO (1)当用户线程发起IO ...
- 【面试】详解同步/异步/阻塞/非阻塞/IO含义与案例
本文详解同步.异步.阻塞.非阻塞,以及IO与这四者的关联,毕竟我当初刚认识这几个名词的时候也是一脸懵. 目录 1.同步阻塞.同步非阻塞.异步阻塞.异步非阻塞 1.同步 2.异步 3.阻塞 4.非阻塞 ...
随机推荐
- 算法实现之python篇
Python source code: gradient_boosting_regression.py from sklearn import ensemblefrom sklearn.metrics ...
- linux下,文件的权限和数字对应关系详解
命令 chmod ABC file 其中A.B.C各为一个数字,分别表示User.Group.及Other的权限. A.B.C这三个数字如果各自转换成由"0"."1&qu ...
- POJ3264-Balanced Lineup-线段树
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53721 Accepted: 25244 ...
- hihoCoder1498-Diligent Robots
#1498 : Diligent Robots Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description The ...
- HDU 2079 dp解法
选课时间(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 0/1背包 dp学习~6
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 I NEED A OFFER! Time Limit: 2000/1000 MS (Java/O ...
- JAVA爬虫实践(实践四:webMagic和phantomjs和淘宝爬虫)
webMagic虽然方便,但是也有它不适用的地方,比如定向的某个单页面爬虫,或者存在大量ajax请求,页面的跳转请求全都混淆在js里. 这时可以用webMagic结合phantomjs来真实模拟页面请 ...
- [国嵌攻略][059][2440-DMA程序设计]
初始化DMA控制器 1.设置源地址 DISRC(0x4B000000)设置为发送数据的源地址,DISRCC0(0x4B0000004)设置为内存AHB总线,目的地址增长 2.设置目的地址 DIDST0 ...
- NYOJ 1248 海岛争霸(Dijkstra变形——最短路径最大权值)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=1248 描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比 ...
- asp.net网站管理工具 遇到错误。请返回上一页并重试。
原因:项目的路径里有“#”号.