午夜无码人妻aⅴ大片色欲张津瑜,国产69久久久欧美黑人A片,色妺妺视频网,久久久久国产综合AV天堂

Java中BIO,NIO,AIO是什么

這篇文章主要介紹“Java中BIO,NIO,AIO是什么”,在日常操作中,相信很多人在Java中BIO,NIO,AIO是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java中BIO,NIO,AIO是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

金城江網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

在高性能的IO體系設(shè)計(jì)中,有幾個(gè)名詞概念常常會(huì)使我們感到迷惑不解。具體如下: 

1 什么是同步? 
2 什么是異步? 
3 什么是阻塞? 
4 什么是非阻塞? 
5 什么是同步阻塞? 
6 什么是同步非阻塞? 
7 什么是異步阻塞? 

8 什么是異步非阻塞?

先來(lái)舉個(gè)實(shí)例生活中的例子:

如果你想吃一份宮保雞丁蓋飯:

同步阻塞:你到飯館點(diǎn)餐,然后在那等著,還要一邊喊:好了沒(méi)??!

同步非阻塞:在飯館點(diǎn)完餐,就去遛狗了。不過(guò)溜一會(huì)兒,就回飯館喊一聲:好了沒(méi)??!

異步阻塞:遛狗的時(shí)候,接到飯館電話(huà),說(shuō)飯做好了,讓您親自去拿。

異步非阻塞:飯館打電話(huà)說(shuō),我們知道您的位置,一會(huì)給你送過(guò)來(lái),安心遛狗就可以了。

在弄清楚上面的幾個(gè)問(wèn)題之前,我們首先得明白什么是同步,異步,阻塞,非阻塞,只有這幾個(gè)單個(gè)概念理解清楚了,然后在組合理解起來(lái),就相對(duì)比較容易了。 

1,同步和異步是針對(duì)應(yīng)用程序和內(nèi)核的交互而言的。 

2,阻塞和非阻塞是針對(duì)于進(jìn)程在訪問(wèn)數(shù)據(jù)的時(shí)候,根據(jù)IO操作的就緒狀態(tài)來(lái)采取的不同方式,說(shuō)白了是一種讀取或者寫(xiě)入操作函數(shù)的實(shí)現(xiàn)方式,阻塞方式下讀取或者寫(xiě)入函數(shù)將一直等待,而非阻塞方式下,讀取或者寫(xiě)入函數(shù)會(huì)立即返回一個(gè)狀態(tài)值。  

由上描述基本可以總結(jié)一句簡(jiǎn)短的話(huà),同步和異步是目的,阻塞和非阻塞是實(shí)現(xiàn)方式。 

1.同步:指的是用戶(hù)進(jìn)程觸發(fā)IO操作并等待或者輪詢(xún)的去查看IO操作是否就緒。自己上街買(mǎi)衣服,自己親自干這件事,別的事干不了。 


2.異步:異步是指用戶(hù)進(jìn)程觸發(fā)IO操作以后便開(kāi)始做自己的事情,而當(dāng)IO操作已經(jīng)完成的時(shí)候會(huì)得到IO完成的通知(異步的特點(diǎn)就是通知) 告訴朋友自己合適衣服的尺寸,大小,顏色,讓朋友委托去賣(mài),然后自己可以去干別的事。(使用異步IO時(shí),Java將IO讀寫(xiě)委托給OS處理,需要將數(shù)據(jù)緩沖區(qū)地址和大小傳給OS) 


3.阻塞:所謂阻塞方式的意思是指, 當(dāng)試圖對(duì)該文件描述符進(jìn)行讀寫(xiě)時(shí), 如果當(dāng)時(shí)沒(méi)有東西可讀,或者暫時(shí)不可寫(xiě), 程序就進(jìn)入等待 狀態(tài), 直到有東西可讀或者可寫(xiě)為止 去公交站充值,發(fā)現(xiàn)這個(gè)時(shí)候,充值員不在(可能上廁所去了),然后我們就在這里等待,一直等到充值員回來(lái)為止。(當(dāng)然現(xiàn)實(shí)社會(huì),可不是這樣,但是在計(jì)算機(jī)里確實(shí)如此。) 


4.非阻塞:非阻塞狀態(tài)下, 如果沒(méi)有東西可讀, 或者不可寫(xiě), 讀寫(xiě)函數(shù)馬上返回, 而不會(huì)等待, 銀行里取款辦業(yè)務(wù)時(shí),領(lǐng)取一張小票,領(lǐng)取完后我們自己可以玩玩手機(jī),或者與別人聊聊天,當(dāng)輪我們時(shí),銀行的喇叭會(huì)通知,這時(shí)候我們就可以去了。

一個(gè)IO操作其實(shí)分成了兩個(gè)步驟:發(fā)起IO請(qǐng)求和實(shí)際的IO操作。 

同步IO和異步IO的區(qū)別就在于第二個(gè)步驟是否阻塞,如果實(shí)際的IO讀寫(xiě)阻塞請(qǐng)求進(jìn)程,那么就是同步IO。 


阻塞IO和非阻塞IO的區(qū)別在于第一步,發(fā)起IO請(qǐng)求是否會(huì)被阻塞,如果阻塞直到完成那么就是傳統(tǒng)的阻塞IO,如果不阻塞,那么就是非阻塞IO。 

同步和異步是針對(duì)應(yīng)用程序和內(nèi)核的交互而言的,同步指的是用戶(hù)進(jìn)程觸發(fā)IO操作并等待或者輪詢(xún)的去查看IO操作是否就緒,而異步是指用戶(hù)進(jìn)程觸發(fā)IO操作以后便開(kāi)始做自己的事情,而當(dāng)IO操作已經(jīng)完成的時(shí)候會(huì)得到IO完成的通知。

而阻塞和非阻塞是針對(duì)于進(jìn)程在訪問(wèn)數(shù)據(jù)的時(shí)候,根據(jù)IO操作的就緒狀態(tài)來(lái)采取的不同方式,說(shuō)白了是一種讀取或者寫(xiě)入操作函數(shù)的實(shí)現(xiàn)方式,阻塞方式下讀取或者寫(xiě)入函數(shù)將一直等待,而非阻塞方式下,讀取或者寫(xiě)入函數(shù)會(huì)立即返回一個(gè)狀態(tài)值。 


所以,IO操作可以分為3類(lèi):同步阻塞(即早期的BIO操作)、同步非阻塞(NIO)、異步非阻塞(AIO)。 


同步阻塞(BIO): 
在此種方式下,用戶(hù)進(jìn)程在發(fā)起一個(gè)IO操作以后,必須等待IO操作的完成,只有當(dāng)真正完成了IO操作以后,用戶(hù)進(jìn)程才能運(yùn)行。JAVA傳統(tǒng)的IO模型屬于此種方式。 
同步非阻塞(NIO):
在此種方式下,用戶(hù)進(jìn)程發(fā)起一個(gè)IO操作以后便可返回做其它事情,但是用戶(hù)進(jìn)程需要時(shí)不時(shí)的詢(xún)問(wèn)IO操作是否就緒,這就要求用戶(hù)進(jìn)程不停的去詢(xún)問(wèn),從而引入不必要的CPU資源浪費(fèi)。其中目前JAVA的NIO就屬于同步非阻塞IO。 
異步非阻塞(AIO):

此種方式下是指應(yīng)用發(fā)起一個(gè)IO操作以后,不等待內(nèi)核IO操作的完成,等內(nèi)核完成IO操作以后會(huì)通知應(yīng)用程序。

同步阻塞IO(JAVA BIO):
同步并阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)連接一個(gè)線程,即客戶(hù)端有連接請(qǐng)求時(shí)服務(wù)器端就需要啟動(dòng)一個(gè)線程進(jìn)行處理,如果這個(gè)連接不做任何事情會(huì)造成不必要的線程開(kāi)銷(xiāo),當(dāng)然可以通過(guò)線程池機(jī)制改善。 

同步非阻塞IO(Java NIO):

同步非阻塞,服務(wù)器實(shí)現(xiàn)模式為一個(gè)請(qǐng)求一個(gè)線程,即客戶(hù)端發(fā)送的連接請(qǐng)求都會(huì)注冊(cè)到多路復(fù)用器上,多路復(fù)用器輪詢(xún)到連接有I/O請(qǐng)求時(shí)才啟動(dòng)一個(gè)線程進(jìn)行處理。用戶(hù)進(jìn)程也需要時(shí)不時(shí)的詢(xún)問(wèn)IO操作是否就緒,這就要求用戶(hù)進(jìn)程不停的去詢(xún)問(wèn)。 

異步阻塞IO(Java NIO):  
此種方式下是指應(yīng)用發(fā)起一個(gè)IO操作以后,不等待內(nèi)核IO操作的完成,等內(nèi)核完成IO操作以后會(huì)通知應(yīng)用程序,這其實(shí)就是同步和異步最關(guān)鍵的區(qū)別,同步必須等待或者主動(dòng)的去詢(xún)問(wèn)IO是否完成,那么為什么說(shuō)是阻塞的呢?因?yàn)榇藭r(shí)是通過(guò)select系統(tǒng)調(diào)用來(lái)完成的,而select函數(shù)本身的實(shí)現(xiàn)方式是阻塞的,而采用select函數(shù)有個(gè)好處就是它可以同時(shí)監(jiān)聽(tīng)多個(gè)文件句柄(如果從UNP的角度看,select屬于同步操作。因?yàn)閟elect之后,進(jìn)程還需要讀寫(xiě)數(shù)據(jù)),從而提高系統(tǒng)的并發(fā)性!  

(Java AIO(NIO.2))異步非阻塞IO: 
在此種模式下,用戶(hù)進(jìn)程只需要發(fā)起一個(gè)IO操作然后立即返回,等IO操作真正的完成以后,應(yīng)用程序會(huì)得到IO操作完成的通知,此時(shí)用戶(hù)進(jìn)程只需要對(duì)數(shù)據(jù)進(jìn)行處理就好了,不需要進(jìn)行實(shí)際的IO讀寫(xiě)操作,因?yàn)檎嬲腎O讀取或者寫(xiě)入操作已經(jīng)由內(nèi)核完成了。  

BIO、NIO、AIO適用場(chǎng)景分析:
        BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對(duì)服務(wù)器資源要求比較高,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇,但程序直觀簡(jiǎn)單易理解。 
        NIO方式適用于連接數(shù)目多且連接比較短(輕操作)的架構(gòu),比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中,編程比較復(fù)雜,JDK1.4開(kāi)始支持。 
        AIO方式使用于連接數(shù)目多且連接比較長(zhǎng)(重操作)的架構(gòu),比如相冊(cè)服務(wù)器,充分調(diào)用OS參與并發(fā)操作,編程比較復(fù)雜,JDK7開(kāi)始支持。 

到此,關(guān)于“Java中BIO,NIO,AIO是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

分享標(biāo)題:Java中BIO,NIO,AIO是什么
網(wǎng)址分享:http://www.ekvhdxd.cn/article44/pjeiee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)小程序開(kāi)發(fā)、定制網(wǎng)站、微信小程序品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)