生动故事助我理解5个IO模型

今天我阅读了一篇小漫画文章,其中用了一串故事串通了5个io模型,我觉得很好的助力我进行了理解。特此我进行一个简单的总结。原文贴在末尾哦。

linux的IO模型主要分为5种,阻塞IO、非阻塞IO、多路复用IO、信号量通知IO、异步IO。如果理解了这几个模型,那么将很有效的帮助我们更深刻和简单的理解到底在java中什么是io模型,她们的区别又是什么呢。

首先讲下故事前提,有助于我们理解系统中名词及io过程。

我们都知道钓鱼,鱼在荷塘内,当我们坐在荷塘边,手里一直握着鱼竿等待鱼上钩,当鱼竿抖动,我们立马拉起鱼竿将鱼放入鱼篓内,这个钓鱼的过程也就完成了。

一次完整的钓鱼(IO)操作,是鱼(文件)从鱼塘(硬盘)中转移(拷贝)到鱼篓(用户空间)的过程

一、阻塞IO

❣ 今天我去荷塘边钓鱼,钓鱼的过程中,我一直紧紧握着鱼竿,静静等待鱼上钩,在这个过程中我哪儿都不去,不做其他事情,就等鱼上钩。

这就是阻塞IO,我们在等待读取文件的过程中,不做其他操作,只等文件读取成功,从内核态拷贝到用户态。我们也很容易理解,阻塞IO是很简单的,但是也是耗时的。

二、非阻塞IO

❣ 我觉得我钓鱼过程中,我还想去逛逛淘宝,买点衣服,不然太无聊了,所以我就将鱼竿架在旁边。我逛一会淘宝,就过来瞅一眼有没有鱼上钩,鱼没上钩我继续逛,一会接着我再来查看,当某一次看到鱼上钩了以后,立马收鱼线,将鱼放入鱼篓内。

这就是非阻塞IO,我们在等待读取文件的过程中,如果数据还没准备好,那我可以先做其他的,通过一个轮询,我们过一会就查询下数据是否准备完毕,当某次轮询查询到数据已经准备好时,我们就将数据从内核拷贝到用户态。

三、信号量通知IO

❣ 在钓鱼的时候,我虽然逛着淘宝,但是每逛一会我就得看看鱼有没有上钩,太麻烦了,所以我买了一个感应报警器,当鱼上钩抖动的时候,报警器自动报警,我再过去将鱼拉上来放入鱼篓,岂不是美滋滋。

这就是信号量通知IO,我们系统会告诉内核,当数据准备好可以拷贝时,通过一个信号量通知到程序,在此过程中,我可以随便去做其他事情,也无需轮询关心数据是否准备完毕,而当程序收到信号量以后,知道数据已经可以进行拷贝,在切回程序将数据从内核拷贝到用户态。

四、多路复用IO

❣ 我觉得在钓鱼的时候,一根杆子只能钓一条鱼,收获太少了,我想一次性多钓一点鱼鸭,这样我就能早点回家,老婆就不会嫌我钓鱼这么慢还钓得少了啊。所以我想了一个办法,我把多个鱼竿绑在一根大的竹竿上,我就握着这根竹竿,当竹竿上的某一根鱼竿抖动的时候,我就立马拿起这一根鱼竿把鱼钓起来,放入鱼篓中。

这就是多路复用IO,我们可以通过一个select指令将多个io注册到同一个通道内,当通道内的某一个io数据准备好可以读取时,我们可以将数据读取出来。只是在这个过程中,我们也是要紧紧看着这个通道的。

五、异步IO

❣ 我在钓鱼的时候,虽然可以去做其他事情,也可以安装一个报警器来通知我,但是把,当鱼上钩的时候,我还是得自己一个人跑过去将鱼拉上来,放入鱼篓,我觉得很辛苦。所以我干脆花了大手笔,买了一个自动钓鱼竿!这样,当鱼上钩的时候,这个鱼竿就能帮我自动把鱼钓上来,放入鱼篓了,岂不是更省事??

这就是异步IO,这个才是真正的实现了异步。在之前的前几种IO模型中,全部都是基于同步模式。虽然消息的通知,钓鱼的过程我们是异步的,但是实际上,我们只是知道鱼上钩了而已,我们将鱼抓起来放入鱼篓,也就是将数据从内核拷贝到用户态的过程,都是需要自己去完成的,也就是同步的。而异步IO是在数据准备完毕的同时,还将数据替我们拷贝到了用户态,我们真正的解放了双手,这才属于异步!

有人说,那带有报警器的烧水壶也不属于同步咯?这样表达是错误的。因为我们在烧水器报警的同时,水已经烧好了,这属于异步。而钓鱼的时候,报警器响了,但是鱼并没上来,鱼放入鱼篓的过程还未完成,钓鱼这个事情还未完全实现,怎么能属于异步呢?你品,你细品。所以我们最终有了一个异步IO。我们也很好的去区分异步与同步的区别了。

喜欢点个赞哦,特此感谢原作者的体贴解释。

原文在此:https://mp.weixin.qq.com/s?__biz=Mzg3MjA4MTExMw==&mid=2247484746&idx=1&sn=c0a7f9129d780786cabfcac0a8aa6bb7&source=41#wechat_redirect

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

推荐阅读更多精彩内容

  • 成功,每个人的定义都不同,但是,每个人心底都有一个成功的梦想。或是成为CEO,或是迎娶白富美/嫁给高帅富。...
    Silvia花花阅读 381评论 0 1
  • 一天又一天,一年又一年,时间过得真快,二天没有写心得了,写心得是一种锻炼,但是对我来说好象天天考试,没有文化底蕴的...
    1a42e1ff9adc阅读 289评论 0 0
  • 伊川王利珍坚持原创分享426天 总有那么几天,很烦,很累,想放空自己。好好休息一下,啥也不想,啥也不做。 看看群里...
    宛如初夏阅读 273评论 0 1