“
看到標(biāo)題眼耀,可能你會(huì)想英支,相親跟阻塞/非阻塞,同步/異步有啥關(guān)系哮伟,這個(gè)逗b不知道在想什么東西干花。不要急,且聽(tīng)我慢慢道來(lái)
年紀(jì)大了楞黄,一回家七大姑八大姨就各種催婚池凄,都說(shuō)要給我介紹女朋友。這不鬼廓,剛剛門口肿仑,我的大姨,二叔碎税,三大爺就已經(jīng)在門口蹲著我了
大姨:“大外甥啊尤慰,給你介紹個(gè)女朋友要不咯?”
“
我(心理活動(dòng)):要個(gè)鬼啊雷蹂,我還年輕伟端,女朋友還在幼兒園呢!再說(shuō)了匪煌,程序員需要女朋友嘛责蝠?暗辰怼?霜医?昧港?代碼就是我媳婦兒
我:“當(dāng)然要呀,大姨你介紹的支子,怎么滴都得去看看呀” 大姨:“好创肥,大外甥!相信大姨值朋,你在原地不要走動(dòng)叹侄,等我去找我鄰居的外婆家的二兒子的堂弟的侄女,保證給你要到電話昨登。之后就看你本事了趾代!”
“
我(心理活動(dòng)):........,怕是要等到原地爆炸丰辣,之后還得自己去撩撒强,唉~ 我的姨還是這么的不靠譜
這就是同步阻塞
不要問(wèn)我為什么沒(méi)有臉统屈,看到這苗條的身姿胚吁,豪邁的步伐,更重要的是比我還少的頭發(fā)愁憔,還要去看臉嗎腕扶?我深吸一口氣,“叔吨掌,我沒(méi)猜錯(cuò)的話半抱,她也是個(gè)程序員吧?” 三叔:“厲害啊思犁,大侄子代虾,這你都知道进肯,我就說(shuō)你們合適吧”“
我(心里活動(dòng)):我XXXXX激蹲,此處省略5000字
我:“.......................” 我:“得嘞,我是不是也得在這等著您去要電話敖凇学辱?” 三叔:“想什么呢乘瓤?我能跟你大姨一樣嗎?你先回去拾掇拾掇策泣,每過(guò)5分鐘給我打個(gè)電話衙傀,問(wèn)問(wèn)情況就行。不過(guò)叔只負(fù)責(zé)給你要電話啊萨咕,能不能成還得靠你自己统抬!”
“
我(心里活動(dòng)):唉~,打電話就打電話吧危队,至少可以回去坐會(huì)兒了聪建。
我:“......................,好的茫陆,我會(huì)過(guò)段時(shí)間就問(wèn)候下您老人家的” 三叔:“信不信我一巴掌抽死你金麸?” 我:“..................”
這就是同步非阻塞
我:“大爺棚瘟,其實(shí)我想自己努力,我不是這樣的人喜最,不過(guò)你要是非要給我的話蜡坊,我也不太好意思拒絕?國(guó)外的你有嗎变勇?” 三大爺:“信不信我一巴掌抽死你站绪?” “不要廢話,看照片遂鹊,行不行振乏,給句話” “只要你娃兒說(shuō)行,剩下的全交給你大爺就行秉扑,等你見(jiàn)到面的時(shí)候慧邮,她就是你女朋友了,撩都不用你撩舟陆,你該干嘛干嘛去”
“
我(心里活動(dòng)):你大爺還是你大爺
我:“大爺威武误澳!”
這就是異步非阻塞
還不懂?沒(méi)關(guān)系昙沦,接著往下看琢唾,我們進(jìn)入正式的開(kāi)車環(huán)節(jié)!
首先盾饮,我們要知道一次IO的過(guò)程必然會(huì)有三個(gè)角色的參與
應(yīng)用程序
內(nèi)核
數(shù)據(jù)
“
以一次數(shù)據(jù)的讀取為例采桃,應(yīng)用程序是沒(méi)有辦法直接操縱硬件設(shè)備的,只有通過(guò)內(nèi)核才能跟硬件交互丘损。當(dāng)網(wǎng)卡接收到數(shù)據(jù)之后芍碧,此時(shí)數(shù)據(jù)在網(wǎng)卡中,需要內(nèi)核將網(wǎng)卡中的數(shù)據(jù)讀取到內(nèi)核空間中号俐,再?gòu)膬?nèi)核空間拷貝到用戶空間泌豆,這個(gè)時(shí)候應(yīng)用程序才拿到數(shù)據(jù),讀取數(shù)據(jù)結(jié)束吏饿。
在上面相親的這個(gè)過(guò)程中一共也有三個(gè)角色踪危,分別是
我
媒婆(大姨,二叔猪落,三大爺)
我的相親對(duì)象(一個(gè)未知女性)原諒我沒(méi)有用女生這個(gè)詞匯贞远,你們懂的,知道通訊錄的人想法不一樣
類比于IO過(guò)程中的三個(gè)角色
應(yīng)用程序(我)
內(nèi)核(媒婆)
IO的數(shù)據(jù)(相親對(duì)象)
對(duì)于我而言笨忌,最終目的是為了找到女朋友蓝仲, 對(duì)于應(yīng)用程序而言,最終始要讀取到數(shù)據(jù)官疲。
我向媒婆發(fā)起了一個(gè)找女朋友的請(qǐng)求(雖然我是被迫的袱结,不要在意這些細(xì)節(jié)),對(duì)于程序而言途凫,就是程序向內(nèi)核發(fā)起了一個(gè)讀取數(shù)據(jù)的請(qǐng)求垢夹。
首先說(shuō)我大姨:在這一次交互過(guò)程中,如果大姨沒(méi)有給到我電話號(hào)碼维费,那么此時(shí)我只能原地等待果元,什么都干不了,哪里都不能去犀盟,所以我被找女朋友這件事阻塞了而晒,直達(dá)大姨告訴我,電話要到了阅畴,這個(gè)時(shí)候才能繼續(xù)下去倡怎,其次,請(qǐng)注意大姨只負(fù)責(zé)告訴我電話號(hào)碼,通過(guò)這個(gè)電話號(hào)碼把這個(gè)女性撩成女朋友這件事還是要我去做诈胜,所以我找女朋友這個(gè)過(guò)程是同步的豹障。類比應(yīng)用程序的IO冯事,就相當(dāng)于應(yīng)用程序發(fā)起了一個(gè)IO請(qǐng)求(以讀取數(shù)據(jù)為例)焦匈,此時(shí)需要進(jìn)行一次系統(tǒng)調(diào)用,內(nèi)核由用戶態(tài)切換到內(nèi)核態(tài)昵仅,內(nèi)核開(kāi)始跟硬件設(shè)備進(jìn)行交互并從硬件設(shè)備中讀取數(shù)據(jù)缓熟,此時(shí)可能硬件設(shè)備還沒(méi)有接收到數(shù)據(jù),所以內(nèi)核函數(shù)一直阻塞摔笤,直到數(shù)據(jù)到達(dá)才進(jìn)行返回够滑。這就是同步阻塞模型
而對(duì)二叔而言:在跟二叔的交互過(guò)程中,并不需要我一直等待二叔給我找到電話號(hào)碼吕世,只需要過(guò)一段時(shí)間打電話問(wèn)候一次我二叔就行了彰触,他會(huì)向我返回是否拿到了電話號(hào)碼,在這期間我可以做任何事情命辖,所以我沒(méi)有被找女朋友這件事情阻塞况毅。但是,當(dāng)我從二叔手中拿到電話的時(shí)候尔艇,我還是需要將這個(gè)未知女性撩成我的女朋友尔许,所以我找女朋友這個(gè)過(guò)程還是同步的。這就是同步非阻塞模型類比應(yīng)用程序的IO终娃,當(dāng)應(yīng)用程序發(fā)起了一次讀取數(shù)據(jù)的請(qǐng)求味廊,還是會(huì)發(fā)起系統(tǒng)調(diào)用,但是此時(shí)內(nèi)核根據(jù)硬件中是否有數(shù)據(jù)執(zhí)行不同的操作棠耕,如果有數(shù)據(jù)余佛,那么將數(shù)據(jù)拷貝到用戶空間,如果沒(méi)有數(shù)據(jù)也會(huì)返回一個(gè)標(biāo)志窍荧,比如-1衙熔,應(yīng)用程序在輪詢期間并沒(méi)有一直阻塞,而是可以進(jìn)行執(zhí)行搅荞。這就是同步非阻塞
再看我三大爺:三大爺就牛逼了红氯,我向三大爺發(fā)起一個(gè)找女朋友的請(qǐng)求,然后就等著女朋友送上門咕痛。我就問(wèn)你叼不叼吧痢甘?不僅不需要在這傻等,也不用經(jīng)常問(wèn)候茉贡,甚至撩都不用撩了塞栅,叼不叼!腔丧!叼不叼7乓W餮獭!你大爺永遠(yuǎn)是你大爺看到這里,你懂了嗎错邦?
用通俗的語(yǔ)言描述
阻塞/非阻塞:描述的是發(fā)起請(qǐng)求的人的狀態(tài)探赫,比如:我在發(fā)起相親請(qǐng)求后,一直處于阻塞狀態(tài)撬呢,一直在原地等待伦吠,什么都不能做。
同步/異步:代表的是請(qǐng)求被完成的方式魂拦,如果最終還是由我完成的毛仪,那么就是同步的,如果不是由我完成的晨另,而是別人完成后通知我的就是異步的
用專業(yè)的話來(lái)說(shuō)就是
阻塞/非阻塞:描述的是調(diào)用者調(diào)用方法后的狀態(tài)潭千,比如:線程A調(diào)用了B方法,A線程處于阻塞狀態(tài)借尿。
同步/異步:描述的方法跟調(diào)用者間通信的方式刨晴,如果不需要調(diào)用者主動(dòng)等待,調(diào)用者調(diào)用后立即返回路翻,然后方法本身通過(guò)回調(diào)狈癞,消息通知等方式通知調(diào)用者結(jié)果,就是異步的茂契。如果調(diào)用方法后一直需要調(diào)用者一直等待方法返回結(jié)果蝶桶,那么就是同步的
基于上面兩點(diǎn),可以推導(dǎo)出:
“
異步阻塞是沒(méi)有意義的掉冶,也就是不存在異步阻塞這種說(shuō)法真竖。你想想,事情都不需要我做了厌小,我還阻塞著干嘛恢共?王者榮耀不香嗎?
我的java基礎(chǔ)學(xué)習(xí)交流峮:1080621881 璧亚。