摘要:同步信號驅(qū)動在快遞柜上寫上自己的手機號回調(diào)函數(shù),當(dāng)快遞送過來的時候直接給我打電話執(zhí)行回調(diào)函數(shù),然后我去取快遞。
IO模型
對于IO,我們經(jīng)常可以聽到諸如同步阻塞IO,同步非阻塞IO,異步IO等等,那么什么是異步/同步,什么是阻塞/非阻塞?首先一次IO在UNIX系統(tǒng)中分為兩個步驟
1.發(fā)起IO請求:用戶線程向操作系統(tǒng)內(nèi)核發(fā)起IO請求
2.執(zhí)行IO操作:當(dāng)內(nèi)核準備好數(shù)據(jù)可以提交給發(fā)起IO請求的線程
阻塞/非阻塞的區(qū)別:發(fā)起IO請求之后會一直等待直到獲取數(shù)據(jù)則是阻塞,否則是非阻塞
同步/異步的區(qū)別:獲取到的數(shù)據(jù)是自己主動拿到的則是同步,是被動拿到的則是異步
下面我用取快遞這個例子來介紹一下UNIX的五種IO模型
眾所周知吸管喝飲料分為兩個步驟:1.打開快遞柜(發(fā)起IO請求),2.取走快遞(執(zhí)行IO操作)
同步&阻塞IO打開快遞柜(發(fā)起IO請求),如果快遞柜里沒有東西(內(nèi)核沒有準備好數(shù)據(jù)),則一直等在快遞柜旁等快遞來(阻塞直到內(nèi)核準備好數(shù)據(jù)),快遞柜有了快遞則取走(用戶線程讀取內(nèi)核中的數(shù)據(jù))。
整個流程除了拿快遞,等快遞不能做其他事
同步&非阻塞IO打開快遞柜(發(fā)起IO請求),如果快遞柜里沒有東西(內(nèi)核沒有準備好數(shù)據(jù)),則馬上做其他事情每隔一段時間就去快遞柜里打開看看是否有快遞(輪詢內(nèi)核是否準備好數(shù)據(jù)),快遞柜有了快遞則取走(用戶線程讀取內(nèi)核中的數(shù)據(jù))。
盡管這個模型相對同步阻塞IO效率有一定提升,但是大量的無用輪詢造成了CPU的空轉(zhuǎn),很少使用這種IO模型
同步&多路復(fù)用IO需要同時取N個快遞,派一個人幫你監(jiān)視快遞柜,告訴他你想要哪個快遞比如告訴他我要天貓的快遞,然后這個監(jiān)視者一直站在快遞柜旁邊等待天貓快遞到來并簽收,我們只需要向這個監(jiān)視者拿快遞就行了。
這個模型中,監(jiān)視者就是我們Java NIO中的Selector,一個線程阻塞同時監(jiān)管多個線程連接狀態(tài),返回給調(diào)用者連接狀態(tài)滿足所注冊的狀態(tài)條件連接線程。
同步&信號驅(qū)動IO在快遞柜上寫上自己的手機號(回調(diào)函數(shù)),當(dāng)快遞送過來的時候直接給我打電話(執(zhí)行回調(diào)函數(shù)),然后我去取快遞。
異步IO假設(shè)收快遞的是一個國王,只需要叫一聲 我想要收到我的快遞,剩下的都不用國王自己操心了,會派人去快遞柜門口等快遞,然后會有人幫忙把快遞送到手上(用戶線程)
思考其實同步異步/阻塞非阻塞并非只是在計算機的世界里有,在互聯(lián)網(wǎng)時代,大部分的場景都在經(jīng)歷IO模型之間的轉(zhuǎn)變
網(wǎng)購/外賣:就是一種異步IO,商品(數(shù)據(jù))從賣家/餐廳(內(nèi)核態(tài))被送貨員送到家(線程態(tài)),傳統(tǒng)的從家里到餐廳然后吃飯,吃了回家,就是一種典型的同步阻塞IO。
滴滴打車:是一種信號驅(qū)動IO,在滴滴上下單過后就只需等待滴滴軟件提示(回調(diào)函數(shù))已經(jīng)分配好司機并且正在來接你。傳統(tǒng)的方式則是自己要在路口等出租車/公交車,同步阻塞IO。
微信/短信:非阻塞同步IO,要通知其他人直接把信息發(fā)出去就不用管了,一段時間去看看對方是否有回復(fù)(輪詢)。而傳統(tǒng)的打電話則要確保對方接聽并將信息告知對方,同步阻塞IO。
種植業(yè):多路復(fù)用IO,比如farmer每天去看果園哪些蘋果紅了(滿足注冊的條件)就將紅蘋果收下來。如果種植業(yè)機械化程度夠高,則可以變成異步IO的模式,種植,澆水,收割全部由機器完成。
等等
社會上所有能夠提升效率的場景,基本可以用IO模型去進行思考,演進過程也大致是從同步—》異步,阻塞—》非阻塞
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/76829.html
摘要:作為開發(fā)中應(yīng)用最廣泛的開源腳本語言,憑借庫類豐富,使用簡單,安全等特點,成為和等互聯(lián)網(wǎng)巨頭和全球超過網(wǎng)站的主要開發(fā)語言,然而性能問題是一直以來飽受詬病的,來自開發(fā)組的高馳濤同學(xué)將為我們帶來他對性能優(yōu)化方面的思考和建議。 PHP作為Web開發(fā)中應(yīng)用最廣泛的開源腳本語言,憑借庫類豐富,使用簡單,安全等特點,成為Facebook和BAT等互聯(lián)網(wǎng)巨頭和全球超過70%網(wǎng)站的主要開發(fā)語言,然而性能...
摘要:宋體是一款自主研發(fā)的分布式文件存儲產(chǎn)品,此前已推出容量型版本。宋體性能的提升不僅僅是因為存儲介質(zhì)的升級,更有架構(gòu)層面的改進,本文將從協(xié)議索引存儲設(shè)計等幾方面來詳細介紹性能型升級改造的技術(shù)細節(jié)。UFS (UCloud File System) 是一款 UCloud 自主研發(fā)的分布式文件存儲產(chǎn)品,此前已推出容量型 UFS 版本。UFS 以其彈性在線擴容、穩(wěn)定可靠的特點,為眾多公有云、物理云、托管...
摘要:進程和線程究竟是什么東西傳統(tǒng)網(wǎng)絡(luò)服務(wù)模型是如何工作的協(xié)程和線程的關(guān)系和區(qū)別有哪些過程在什么時間發(fā)生在剛剛結(jié)束的上海站,來自七牛云存儲的高級工程師許智翔帶來了關(guān)于的分享中的進程線程協(xié)程同步異步回調(diào)。使用紅黑樹管理就緒隊列。 進程和線程究竟是什么東西?傳統(tǒng)網(wǎng)絡(luò)服務(wù)模型是如何工作的?協(xié)程和線程的關(guān)系和區(qū)別有哪些?IO過程在什么時間發(fā)生? 在剛剛結(jié)束的 PyCon2014 上海站,來自七牛云...
閱讀 1171·2021-11-24 09:39
閱讀 2674·2021-09-28 09:35
閱讀 1070·2019-08-30 15:55
閱讀 1361·2019-08-30 15:44
閱讀 879·2019-08-29 17:00
閱讀 1969·2019-08-29 12:19
閱讀 3310·2019-08-28 18:28
閱讀 690·2019-08-28 18:10