最近这两天都在看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的地方真是太少太少了.

转载于:https://www.cnblogs.com/c-slmax/p/8444205.html

关于异步IO与同步IO的写操作区别相关推荐

  1. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...

  2. 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO

    5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境.本文是在<UNIX网络编程 ...

  3. 两段文章清楚弄明白什么是异步IO、同步IO、同步阻塞IO、同步非阻塞IO、异步阻塞IO、异步非阻塞IO

    百科解释:异步IO_百度百科 先看2,再看1,会理解的更好! 1. 2.阻塞和非阻塞 # 阻塞和非阻塞关注的是程序在等待调用结果时的状态 # 阻塞调用是指调用结果返回之前,当前线程会被挂起.调用线程只 ...

  4. python 异步io_python之同步IO和异步IO

    linux操作系统基础知识 用户空间和内核空间 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核保证内核的安全,操 ...

  5. 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO

    <Windows核心编程系列>九谈谈同步设备IO与异步设备IO之同步设备IO 同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请 ...

  6. 浅谈python异步IO,同步IO,线程与进程~

    主线程下的线程之间是可以通信的,但是父进程下的子进程之间不能主动通信,但是子进程想要实现通信也是可以的,可以选择折中的方法来实现,比如multiprocessing.Queue,用法与线程中的queu ...

  7. 同步IO(阻塞IO、非阻塞IO), 异步IO的理解

    什么是IO? 在计算机中无时无刻不存在着对数据的访问和读取(数据都存储在物理的媒介上,例如寄存器,高速缓存,内存,磁盘,网卡等等),这些操作被称为IO. 阻塞IO 当用户线程发起IO请求后,会进行系统 ...

  8. HID 异步访问和同步访问

    使用 Windows 自带 API 枚举并完成读写的详细步骤,参考下面两篇文章: https://blog.csdn.net/phenixyf/article/details/72478933 htt ...

  9. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO

    Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...

最新文章

  1. 告别渣画质,视频会议带宽降90%,英伟达公开Maxine服务背后重要技术
  2. 比特币现金足球:BCH驱动的多人世界杯应用
  3. maven 程序包不存在_有人说 Maven 很简单,我却被“伤害”过
  4. leetcode设计链表,非常工整的实现你值得拥有
  5. 没有桌面体验功能就不能进行图片打印
  6. 【视频】文本挖掘:主题模型(LDA)及R语言实现分析游记数据
  7. Android 3.0“.NET研究”七大特性全解析
  8. 信息熵 条件熵 信息增益 信息增益比 GINI系数
  9. Xshell免费版安装 常用连接linux工具
  10. 奇迹mu 服务器状态,奇迹mu服务端的架设
  11. python二级题库(百分之九十原题) 刷题软件推荐 第二套
  12. 计算机系统文件夹打不开,为什么打不开文件夹
  13. 什么是SUM函数以及如何在Python,Excel和Mathlab中使用?
  14. SVG动画解释-学习笔记
  15. 一个吊炸天的登录页面
  16. DEA在科技评价中的指标优化研究
  17. 命令行玩斗地主,摸鱼再也不怕老板了!
  18. 决策树的生成之ID3与C4.5算法
  19. 目前使用ORACLE EBS的公司列表
  20. 【前端22_混合开发】介绍、初步认识MUI、UI组件、窗口管理

热门文章

  1. [译】Diving Into The Ethereum VM
  2. AOP面向切面编程在Android中的使用
  3. 对深度学习的逃逸攻击 — 探究人工智能系统中的安全盲区
  4. Keras Tutorial: Deep Learning in Python
  5. 简述生成式对抗网络 GAN
  6. JZOJ 5906. 【NOIP2018模拟10.15】传送门 (portal)
  7. JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
  8. 打印机支持打印html页面吗,vue下调用打印功能,打印html页面
  9. 最短路径问题(Floyd算法)
  10. AtCoder AGC001D Arrays and Palindrome (构造)