关于异步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的地方真是太少太少了.
转载于:https://www.cnblogs.com/c-slmax/p/8444205.html
关于异步IO与同步IO的写操作区别相关推荐
- 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境. 本文是在<UNIX网络编 ...
- 5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
5种IO模型.阻塞IO和非阻塞IO.同步IO和异步IO 看了一些文章,发现有很多不同的理解,可能是因为大家入切的角度.环境不一样.所以,我们先说明基本的IO操作及环境.本文是在<UNIX网络编程 ...
- 两段文章清楚弄明白什么是异步IO、同步IO、同步阻塞IO、同步非阻塞IO、异步阻塞IO、异步非阻塞IO
百科解释:异步IO_百度百科 先看2,再看1,会理解的更好! 1. 2.阻塞和非阻塞 # 阻塞和非阻塞关注的是程序在等待调用结果时的状态 # 阻塞调用是指调用结果返回之前,当前线程会被挂起.调用线程只 ...
- python 异步io_python之同步IO和异步IO
linux操作系统基础知识 用户空间和内核空间 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限.为了保证用户进程不能直接操作内核保证内核的安全,操 ...
- 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO
<Windows核心编程系列>九谈谈同步设备IO与异步设备IO之同步设备IO 同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请 ...
- 浅谈python异步IO,同步IO,线程与进程~
主线程下的线程之间是可以通信的,但是父进程下的子进程之间不能主动通信,但是子进程想要实现通信也是可以的,可以选择折中的方法来实现,比如multiprocessing.Queue,用法与线程中的queu ...
- 同步IO(阻塞IO、非阻塞IO), 异步IO的理解
什么是IO? 在计算机中无时无刻不存在着对数据的访问和读取(数据都存储在物理的媒介上,例如寄存器,高速缓存,内存,磁盘,网卡等等),这些操作被称为IO. 阻塞IO 当用户线程发起IO请求后,会进行系统 ...
- HID 异步访问和同步访问
使用 Windows 自带 API 枚举并完成读写的详细步骤,参考下面两篇文章: https://blog.csdn.net/phenixyf/article/details/72478933 htt ...
- python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO
Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...
最新文章
- 告别渣画质,视频会议带宽降90%,英伟达公开Maxine服务背后重要技术
- 比特币现金足球:BCH驱动的多人世界杯应用
- maven 程序包不存在_有人说 Maven 很简单,我却被“伤害”过
- leetcode设计链表,非常工整的实现你值得拥有
- 没有桌面体验功能就不能进行图片打印
- 【视频】文本挖掘:主题模型(LDA)及R语言实现分析游记数据
- Android 3.0“.NET研究”七大特性全解析
- 信息熵 条件熵 信息增益 信息增益比 GINI系数
- Xshell免费版安装 常用连接linux工具
- 奇迹mu 服务器状态,奇迹mu服务端的架设
- python二级题库(百分之九十原题) 刷题软件推荐 第二套
- 计算机系统文件夹打不开,为什么打不开文件夹
- 什么是SUM函数以及如何在Python,Excel和Mathlab中使用?
- SVG动画解释-学习笔记
- 一个吊炸天的登录页面
- DEA在科技评价中的指标优化研究
- 命令行玩斗地主,摸鱼再也不怕老板了!
- 决策树的生成之ID3与C4.5算法
- 目前使用ORACLE EBS的公司列表
- 【前端22_混合开发】介绍、初步认识MUI、UI组件、窗口管理
热门文章
- [译】Diving Into The Ethereum VM
- AOP面向切面编程在Android中的使用
- 对深度学习的逃逸攻击 — 探究人工智能系统中的安全盲区
- Keras Tutorial: Deep Learning in Python
- 简述生成式对抗网络 GAN
- JZOJ 5906. 【NOIP2018模拟10.15】传送门 (portal)
- JZOJ 100035. 【NOIP2017提高A组模拟7.10】区间
- 打印机支持打印html页面吗,vue下调用打印功能,打印html页面
- 最短路径问题(Floyd算法)
- AtCoder AGC001D Arrays and Palindrome (构造)