冒著被女朋友打的風(fēng)險(xiǎn),帶你了解阻塞、非阻塞、同步、異步
共
1941字,需瀏覽
4分鐘
·
2021-04-02 15:13

看電影
終于周末了,今天天氣真好呀,聽(tīng)說(shuō)《阿凡達(dá)》重新上映了!我們趕緊去看吧!當(dāng)女朋友同意去看電影了,你穿好鞋收拾好了,女朋友突然說(shuō)等等我收拾下!一個(gè)漫長(zhǎng)的等待將要開(kāi)始了,洗澡、補(bǔ)水、防曬...... 若干年后..... 。你啥也不敢,干巴巴的看著她一點(diǎn)點(diǎn)的化妝,當(dāng)收拾好了打車到電影院天色已經(jīng)見(jiàn)晚!
女友要收拾打扮的時(shí)候,你在旁邊啥也不干等待著她收拾,直到她收拾完一起出發(fā),這個(gè)過(guò)程就是同步。哎哎哎!聽(tīng)說(shuō)《哥斯拉大戰(zhàn)金剛》上映啦!同事說(shuō)很好看哎,我們一起去看吧!當(dāng)女朋友同意要去看的時(shí)候,突然想起來(lái)上次看電影前漫長(zhǎng)的等待,不僅陷入了長(zhǎng)思......不能在那干等啊!對(duì)頭!LOL 排位賽我怎么忘了呢!這個(gè)時(shí)間我還能打幾百把游戲呢!聰明的你在女朋友收拾的過(guò)程中不在死等啥也不干,而是去打游戲了,當(dāng)你女朋友收拾完后通知你出發(fā)。這就是異步 。
通過(guò)上面的看電影不難看出,在第二次看電影前等女朋友收拾的過(guò)程中你在打游戲,打游戲和收拾兩件事在同時(shí)發(fā)生,不需要雙方互相等待,這就是異步為什么比同步高效。上述的同步和異步是線程間調(diào)用,是調(diào)用者和被調(diào)用者之間協(xié)同工作的方式。同步是調(diào)用方等待被調(diào)用方執(zhí)行完成后再執(zhí)行;異步是兩方一起干,被調(diào)用者完成后通知調(diào)用者即可。打電話
上次等女朋友看電影,她生氣我等她沒(méi)有耐心,這不打電話問(wèn)問(wèn)小松怎么哄女朋友!小松女朋友接的,小松好像在忙,我就等了一會(huì), 直到他接到電話詢問(wèn)他怎么辦!這種一直等待的方式屬于阻塞IO。
1、讓小松接電話:調(diào)用 read() 函數(shù)讀取數(shù)據(jù),沒(méi)有數(shù)據(jù)就一直等待,用戶線程進(jìn)入阻塞狀態(tài)。2、老王,剛才忙,找我什么事?: 數(shù)據(jù)就緒后,內(nèi)核將數(shù)據(jù)拷貝到用戶線程,用戶此時(shí)解除阻塞狀態(tài)。再打過(guò)去他又不在,我沒(méi)有和上次一樣一直等待,而是掛斷了去忙其他事情了,過(guò)了一會(huì)再打,又不在, 再打,又不在...... 打了很多遍終于接通了,這種方式屬于非阻塞IO。
1、讓小松接電話:調(diào)用 read(設(shè)置為非阻塞), 無(wú)數(shù)據(jù),立即返回;2、讓小松接電話:調(diào)用read(設(shè)置為非阻塞), 無(wú)數(shù)據(jù),立即返回;4、老王,剛才忙,找我什么事?:內(nèi)核數(shù)據(jù)就緒,內(nèi)核將數(shù)據(jù)拷貝到用戶線程。可見(jiàn),這種非阻塞一般是在一個(gè) while 循環(huán)中不斷調(diào)用 read, 如果數(shù)據(jù)未就緒,用戶線程將處于忙輪詢,CPU 使用率會(huì)很高。買禮物
詢問(wèn)小松后,給女朋友準(zhǔn)備了兩份小驚奇!快遞遲遲不到,要不打電話問(wèn)問(wèn)快遞員!我打電話快遞員說(shuō)還沒(méi)有到,到了會(huì)通知我,我就接著干我的事情去了。快遞小哥等待了一會(huì)后,快遞到達(dá)菜鳥(niǎo)驛站了,收到快遞小哥的電話后,我馬不停蹄的去取快遞,最終快遞被我扛回了家。這就是所謂的同步IO。
1、打電話詢問(wèn)快遞是否到了 :即調(diào)用 epoll/poll/select 函數(shù);2、親,您的快遞到來(lái),到菜鳥(niǎo)驛站提取:即 epoll 函數(shù)返回,通知你某個(gè) fd 上面有數(shù)據(jù)到來(lái);3、麻溜的去取快遞:即調(diào)用 read 函數(shù)從內(nèi)核讀取數(shù)據(jù),此時(shí)調(diào)用數(shù)據(jù)一定存在;注意:同步 IO 的特點(diǎn)是:第三步時(shí)候主動(dòng)調(diào)用 read 時(shí)候,需要從內(nèi)核 copy 數(shù)據(jù)到用戶態(tài),這個(gè)過(guò)程用戶態(tài)是需要等待的,即 reactor 是屬于同步IO。還有一個(gè)禮物沒(méi)到呢!打電話詢問(wèn)快遞小哥,也沒(méi)有到,然后我就去洗衣服去了。過(guò)了一會(huì)快遞到達(dá)菜鳥(niǎo)驛站后快遞小哥直接將快遞搬到了我的家門口,然后通知我快遞到了。這就是異步IO。
1、打帶你詢問(wèn)快遞是否到了:調(diào)用 aio_read(buf), 并傳遞一個(gè)用戶讀取緩沖區(qū),立即返回。2、親,你的快遞已經(jīng)到了:signal/callback 的方式通知你,內(nèi)核已經(jīng)將數(shù)據(jù)從拷貝到了你傳遞進(jìn)來(lái)的 buf 中了。您可以直接使用了。不需要去等待。 異步 IO 和同步 IO 的關(guān)鍵點(diǎn)在于:用戶進(jìn)程是否需要等待把數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間。和阻塞非阻塞沒(méi)關(guān)系。只要用戶進(jìn)程等待數(shù)據(jù)拷貝就是同步。 阻塞和非阻塞關(guān)鍵點(diǎn)在于:阻塞和非阻塞都有等待數(shù)據(jù)拷貝過(guò)程。不過(guò)非阻塞IO 不會(huì)再?zèng)]有數(shù)據(jù)時(shí)傻等。
瀏覽
24
波多野结衣一品二品免费观看AV
|
精品久久福利视频
|
国产精品成人片
|
五月丁香花婷婷
|
操逼动漫视频
|