使用資源階段:真正進(jìn)行數據接收和發(fā)生。
舉例說(shuō)就是排隊和服務(wù)。
IO請求的兩個(gè)階段:
- 異步IO:由于異步IO請求只是寫(xiě)入了緩存,從緩存到硬盤(pán)是否成功不可知,因此異步IO相當于把一個(gè)IO拆成了兩部分,一是發(fā)起請求,二是獲取處理結果。因此,對應用來(lái)說(shuō)增加了復雜性。但是異步IO的性能是所有很好的,而且異步的思想貫穿了IT系統放放面面。
2.多路復用確實(shí)是阻塞的,但是這個(gè)阻塞是在select或者poll函數上的或者是在內部實(shí)現上(select雖然阻塞,但是能支持多路IO);對Java來(lái)說(shuō),由于封裝了一層,Java的接口屏蔽了這個(gè)阻塞,對外呈現出非阻塞的使用方式。感覺(jué)這么說(shuō)可能更恰當一些——JavaNIO底層實(shí)現使用了IO多路復用,而在本身NIO的接口使用方式上,是一種非阻塞IO的方式(輪詢(xún)檢查的方式)。- 同步IO:同步IO保證一個(gè)IO操作結束之后才會(huì )返回,因此同步IO效率會(huì )低一些,但是對應用來(lái)說(shuō),編程方式會(huì )簡(jiǎn)單。Java的BIO和NIO都是使用這種方式進(jìn)行數據處理。
在使用資源階段,IO分為同步IO和異步IO。
從性能上看,異步IO的性能無(wú)疑是最好的。
這部分的東西在網(wǎng)絡(luò )編程經(jīng)常能看到,不過(guò)在所有IO處理中都是類(lèi)似的。
- 阻塞IO:使用簡(jiǎn)單,但隨之而來(lái)的問(wèn)題就是會(huì )形成阻塞,需要獨立線(xiàn)程配合,而這些線(xiàn)程在大多數時(shí)候都是沒(méi)有進(jìn)行運算的。Java的BIO使用這種方式,問(wèn)題帶來(lái)的問(wèn)題很明顯,一個(gè)Socket需要一個(gè)獨立的線(xiàn)程,因此,會(huì )造成線(xiàn)程膨脹。
按照Unix的5個(gè)IO模型劃分
- 異步IO
各種IO的特點(diǎn)
同步IO:應用阻塞在發(fā)送或接收數據的狀態(tài),直到數據成功傳輸或返回失敗。
- 信號驅動(dòng)的IO
阻塞IO:資源不可用時(shí),IO請求一直阻塞,直到反饋結果(有數據或超時(shí))。
異步IO:應用發(fā)送或接收數據后立刻返回,數據寫(xiě)入OS緩存,由OS完成數據發(fā)送或接收,并返回成功或失敗的信息給應用。
- 阻塞IO
在等待數據階段,IO分為阻塞IO和非阻塞IO。
- 非阻塞IO
非阻塞IO:資源不可用時(shí),IO請求離開(kāi)返回,返回數據標識資源不可用
- 非阻塞IO:采用輪詢(xún)方式,不會(huì )形成線(xiàn)程的阻塞。Java的NIO使用這種方式,對比BIO的優(yōu)勢很明顯,可以使用一個(gè)線(xiàn)程進(jìn)行所有Socket的監聽(tīng)(select)。大大減少了線(xiàn)程數。
等待資源階段:IO請求一般需要請求特殊的資源(如磁盤(pán)、RAM、文件),當資源被上一個(gè)使用者使用沒(méi)有被釋放時(shí),IO請求就會(huì )被阻塞,直到能夠使用這個(gè)資源。
- IO復用
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站