IO整理

名词解释:

区域

用户态:用户应用程序所在的。
内核态:操作系统程序所在的。

磁盘与内核态的缓存传输数据

PIO:很早之前数据在磁盘与内存间交互需要CPU存储转发,大量占用CPU时间,这种模式叫做PIO。
DMA:直接内存访问,CPU告诉DMA控制器,DMA通过系统总线传输数据,完毕了告诉CPU,大量地减少了CPU时间的占用。

两种copy方式

CPU copy:缓存与缓存之间copy
DMA copy:磁盘与缓存之间copy

两种IO

文件IO(磁盘IO):本地磁盘与本地应用程序缓存间传输数据。
网络IO:主机将数据从磁盘发送到网卡缓存中,再发送出去与其他主机传输数据。

多种IO流程

总体流程:

image.png

缓冲IO:磁盘数据DMA copy到内核态高速页缓存,应用程序通过系统调用从内核态高速页缓存CPU copy到用户态应用程序缓存中。这样如果高速页缓存中有的数据就不用读取磁盘从而提升性能。
image.png

直接IO:应用程序不经过内核态高速页缓存直接系统调用读取磁盘数据,一些数据库管理类的应用倾向于选择自己的缓存机制而不使用高速缓存页,但是如果应用程序缓存中没有的数据从磁盘加载速度会非常缓慢。

image.png

内存映射:指的是内核态高速缓存页与用户态应用程序缓存建立地址映射,通过共享的方式减少从内核态到用户态的CPU copy。当有大量数据需要传输时使用内存映射会获得比较好的效率。

image.png

网络IO中的零拷贝:正常网络IO流程为 磁盘数据-->DMA copy-->内核态高速页缓存-->CPU copy-->用户态应用程序缓存-->CPU copy-->内核态Socket缓存-->DMA copy-->网卡缓存-->网络发送。一共4次copy。
零拷贝网络IO流程为 磁盘数据-->DMA copy-->内核态高速页缓存-->apend dscr(追加位置与偏移量)-->内核态Socket缓存-->DMA gather copy(根据Socket缓存中的位置与偏移量去高速页缓存中获取数据)-->网卡缓存-->网络发送。一共2次copy。可以看到比正常的网络IO流程减少了2次copy操作

同步异步阻塞非阻塞

同步就是两种东西通过一种机制实现步调一致,异步是两种东西不必步调一致。

  1. 同步调用与异步调用:
    在用在调用场景中,无非是对调用结果的不同处理。我理解同步调用就是调用一但返回,就能知道结果,而异步是返回时不一定知道结果,还得通过其他机制来获知结果,如:a. 状态b. 通知c. 回调函数
    这里的同步调用不一定会阻塞,例如立即返回失败的结果。而异步调用立即返回时,你还拿不到结果的。
  2. 同步线程与异步线程:
    同步线程:即两个线程步调要一致,要相互协商。两个线程的运行进度各不相同,怎么才能步调一致呢?我们直观的理解就是,快的等慢的呗!快的阻塞一下等到慢的步调一致即可。
    异步线程:步调不用一致,各自按各自的步调运行,不受另一个线程的影响。同步是指两个线程的运行是相关的,其中一个线程可能要阻塞等待另外一个线程的运行;异步的意思是两个线程毫无相关,自己运行自己的。
  3. 同步通信与异步通信:
    这里的同步和异步是指:发送方和接收方是否协调步调一致!
    同步通信是指:发送方和接收方通过一定机制,实现收发步调协调。如:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式
    异步通信是指:发送方的发送不管接收方的接收状态,如:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

阻塞和非阻塞就比较容易理解了,没有上面那么多场景,阻塞就是这个事情阻到这儿了,不能继续往下干事了,非阻塞就是这个事情不会阻碍你继续干后面的事情。阻塞可以是实现同步的一种手段!例如两个东西需要同步,一旦出现不同步情况,我就阻塞快的一方,使双方达到同步。

同步是两个对象之间的关系,而阻塞是一个对象的状态。

按照我自己的理解
IO的同步和异步,说的是2个进程之间的事情,一个是用户态的用户进程,另一个是内核态的系统调用进程。
说它们是同步的,说明2个进程之间努力的想要步调一致,比如一方一直等待,或者不停请求。
说它们是异步的,说明2个进程之间没有努力的想要步调一致,各自不管,等到一方完事了给个通知或者回调函数等。

阻塞非阻塞说的是一个进程的事情,自己处于了等待状态就是被阻塞了,仍然运行或者运行完毕就是非阻塞的。

一个类比
老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

5个IO模型

https://www.cnblogs.com/sunsky303/p/8962628.html
https://www.cnblogs.com/williamjie/p/11194561.html
http://www.52im.net/thread-2640-1-1.html
https://www.cnblogs.com/jianmang/articles/4909784.html
https://www.zhihu.com/question/29005375

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358