异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...
年紀大了,一回家七大姑八大姨就各種催婚,都說要給我介紹女朋友。這不,剛剛門口,我的大姨,二叔,三大爺就已經在門口蹲著我了
大姨:“大外甥啊,給你介紹個女朋友要不咯?”
“我(心理活動):要個鬼啊,我還年輕,女朋友還在幼兒園呢!再說了,程序員需要女朋友嘛?啊???代碼就是我媳婦兒我:“當然要呀,大姨你介紹的,怎么滴都得去看看呀” 大姨:“好,大外甥!相信大姨,你在原地不要走動,等我去找我鄰居的外婆家的二兒子的堂弟的侄女,保證給你要到電話。之后就看你本事了!”
“我(心理活動):........,怕是要等到原地爆炸,之后還得自己去撩,唉~ 我的姨還是這么的不靠譜這就是同步阻塞
大姨一走,我三叔立馬沖了上來 三叔:“別信你姨的,她鄰居的外婆家的二兒子的堂弟的侄女什么樣我不知道嗎,來,叔給你介紹個”,一邊說著,一邊掏出了手機,照片大概是這個樣子
不要問我為什么沒有臉,看到這苗條的身姿,豪邁的步伐,更重要的是比我還少的頭發,還要去看臉嗎?我深吸一口氣,“叔,我沒猜錯的話,她也是個程序員吧?” 三叔:“厲害啊,大侄子,這你都知道,我就說你們合適吧”
“我(心里活動):我XXXXX,此處省略5000字我:“.......................” 我:“得嘞,我是不是也得在這等著您去要電話啊?” 三叔:“想什么呢?我能跟你大姨一樣嗎?你先回去拾掇拾掇,每過5分鐘給我打個電話,問問情況就行。不過叔只負責給你要電話啊,能不能成還得靠你自己!”
“我(心里活動):唉~,打電話就打電話吧,至少可以回去坐會兒了。我:“......................,好的,我會過段時間就問候下您老人家的” 三叔:“信不信我一巴掌抽死你?” 我:“..................”
這就是同步非阻塞
進門,剛剛躺上我心愛的小沙發,三大爺又來了 三大爺:“年輕人,知道你為什么沒有女朋友嘛?知道我來干什么的嘛?” 我:“大爺,難道你有什么秘訣相授?” 此時我腦海里浮現出這樣一幅圖:
我:“大爺,其實我想自己努力,我不是這樣的人,不過你要是非要給我的話,我也不太好意思拒絕?國外的你有嗎?” 三大爺:“信不信我一巴掌抽死你?” “不要廢話,看照片,行不行,給句話” “只要你娃兒說行,剩下的全交給你大爺就行,等你見到面的時候,她就是你女朋友了,撩都不用你撩,你該干嘛干嘛去”
“我(心里活動):你大爺還是你大爺我:“大爺威武!”
這就是異步非阻塞
看完這個故事,你懂了嗎??ps:此故事純屬虛構,如有雷同,那你就逗笑我了,哈哈哈!
還不懂?沒關系,接著往下看,我們進入正式的開車環節!
首先,我們要知道一次IO的過程必然會有三個角色的參與
在上面相親的這個過程中一共也有三個角色,分別是
- 我
- 媒婆(大姨,二叔,三大爺)
- 我的相親對象(一個未知女性)原諒我沒有用女生這個詞匯,你們懂的,知道通訊錄的人想法不一樣
類比于IO過程中的三個角色
- 應用程序(我)
- 內核(媒婆)
- IO的數據(相親對象)
對于我而言,最終目的是為了找到女朋友, 對于應用程序而言,最終始要讀取到數據。
我向媒婆發起了一個找女朋友的請求(雖然我是被迫的,不要在意這些細節),對于程序而言,就是程序向內核發起了一個讀取數據的請求。
首先說我大姨:在這一次交互過程中,如果大姨沒有給到我電話號碼,那么此時我只能原地等待,什么都干不了,哪里都不能去,所以我被找女朋友這件事阻塞了,直達大姨告訴我,電話要到了,這個時候才能繼續下去,其次,請注意大姨只負責告訴我電話號碼,通過這個電話號碼把這個女性撩成女朋友這件事還是要我去做,所以我找女朋友這個過程是同步的。
類比應用程序的IO,就相當于應用程序發起了一個IO請求(以讀取數據為例),此時需要進行一次系統調用,內核由用戶態切換到內核態,內核開始跟硬件設備進行交互并從硬件設備中讀取數據,此時可能硬件設備還沒有接收到數據,所以內核函數一直阻塞,直到數據到達才進行返回。這就是同步阻塞模型
而對二叔而言:在跟二叔的交互過程中,并不需要我一直等待二叔給我找到電話號碼,只需要過一段時間打電話問候一次我二叔就行了,他會向我返回是否拿到了電話號碼,在這期間我可以做任何事情,所以我沒有被找女朋友這件事情阻塞。但是,當我從二叔手中拿到電話的時候,我還是需要將這個未知女性撩成我的女朋友,所以我找女朋友這個過程還是同步的。這就是同步非阻塞模型
類比應用程序的IO,當應用程序發起了一次讀取數據的請求,還是會發起系統調用,但是此時內核根據硬件中是否有數據執行不同的操作,如果有數據,那么將數據拷貝到用戶空間,如果沒有數據也會返回一個標志,比如-1,應用程序在輪詢期間并沒有一直阻塞,而是可以進行執行。這就是同步非阻塞
再看我三大爺:三大爺就牛逼了,我向三大爺發起一個找女朋友的請求,然后就等著女朋友送上門。我就問你叼不叼吧?不僅不需要在這傻等,也不用經常問候,甚至撩都不用撩了,叼不叼!!叼不叼!!!你大爺永遠是你大爺
類比應用程序的IO,應用程序只需要發起一次讀取數據的請求,接下來就等著內核將數據拷貝到用戶空間,并且內核將數據拷貝完成后會通知應用程序,在整個過程中程序可以繼續往下執行。類似下面這樣的代碼:
read(byte[],// 傳入一個回調函數,內核完成數據拷貝后直接執行這個回調函數) // 這里你想干嘛就干嘛看到這里,你懂了嗎?
用通俗的語言描述
- 阻塞/非阻塞:描述的是發起請求的人的狀態,比如:我在發起相親請求后,一直處于阻塞狀態,一直在原地等待,什么都不能做。
- 同步/異步:代表的是請求被完成的方式,如果最終還是由我完成的,那么就是同步的,如果不是由我完成的,而是別人完成后通知我的就是異步的
用專業的話來說就是
- 阻塞/非阻塞:描述的是調用者調用方法后的狀態,比如:線程A調用了B方法,A線程處于阻塞狀態。
- 同步/異步:描述的方法跟調用者間通信的方式,如果不需要調用者主動等待,調用者調用后立即返回,然后方法本身通過回調,消息通知等方式通知調用者結果,就是異步的。如果調用方法后一直需要調用者一直等待方法返回結果,那么就是同步的
基于上面兩點,可以推導出:
“異步阻塞是沒有意義的,也就是不存在異步阻塞這種說法。你想想,事情都不需要我做了,我還阻塞著干嘛?王者榮耀不香嗎?碼字不易,來個素質三連吧~!!!!
原文:
https://mp.weixin.qq.com/s?__biz=MzI0ODk2NDIyMQ==&mid=2247483928&idx=1&sn=c7da82d870011885a00f877dd0230f00&chksm=e999f70adeee7e1cc5a313335ba797ba7db8357c4b7409354e1d92ae309f0adf94c18a54f588&token=463816479&lang=zh_CN#rd?mp.weixin.qq.com總結
以上是生活随笔為你收集整理的异步和同步区别是什么_一次相亲经历,我彻底搞懂了什么叫阻塞非阻塞,同步异步...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 尿素相关股票龙头
- 下一篇: 腾讯控股再度回购11.8万股 市值跌破3