溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java NIO與傳統(tǒng)IO的區(qū)別是什么

發(fā)布時間:2021-07-24 10:15:54 來源:億速云 閱讀:132 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容介紹了“Java NIO與傳統(tǒng)IO的區(qū)別是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

傳統(tǒng)的socket IO中,需要為每個連接創(chuàng)建一個線程,當(dāng)并發(fā)的連接數(shù)量非常巨大時,線程所占用的棧內(nèi)存和CPU線程切換的開銷將非常巨大。使用NIO,不再需要為每個線程創(chuàng)建單獨(dú)的線程,可以用一個含有限數(shù)量線程的線程池,甚至一個線程來為任意數(shù)量的連接服務(wù)。由于線程數(shù)量小于連接數(shù)量,所以每個線程進(jìn)行IO操作時就不能阻塞,如果阻塞的話,有些連接就得不到處理,NIO提供了這種非阻塞的能力。

小量的線程如何同時為大量連接服務(wù)呢,答案就是就緒選擇。這就好比到餐廳吃飯,每來一桌客人,都有一個服務(wù)員專門為你服務(wù),從你到餐廳到結(jié)帳走人,這樣方式的好處是服務(wù)質(zhì)量好,一對一的服務(wù),VIP啊,可是缺點(diǎn)也很明顯,成本高,如果餐廳生意好,同時來100桌客人,就需要100個服務(wù)員,那老板發(fā)工資的時候得心痛死了,這就是傳統(tǒng)的一個連接一個線程的方式。

老板是什么人啊,精著呢。這老板就得捉摸怎么能用10個服務(wù)員同時為100桌客人服務(wù)呢,老板就發(fā)現(xiàn),服務(wù)員在為客人服務(wù)的過程中并不是一直都忙著,客人點(diǎn)完菜,上完菜,吃著的這段時間,服務(wù)員就閑下來了,可是這個服務(wù)員還是被這桌客人占用著,不能為別的客人服務(wù),用華為領(lǐng)導(dǎo)的話說,就是工作不飽滿。那怎么把這段閑著的時間利用起來呢。這餐廳老板就想了一個辦法,讓一個服務(wù)員(前臺)專門負(fù)責(zé)收集客人的需求,登記下來,比如有客人進(jìn)來了、客人點(diǎn)菜了,客人要結(jié)帳了,都先記錄下來按順序排好。每個服務(wù)員到這里領(lǐng)一個需求,比如點(diǎn)菜,就拿著菜單幫客人點(diǎn)菜去了。點(diǎn)好菜以后,服務(wù)員馬上回來,領(lǐng)取下一個需求,繼續(xù)為別人客人服務(wù)去了。這種方式服務(wù)質(zhì)量就不如一對一的服務(wù)了,當(dāng)客人數(shù)據(jù)很多的時候可能需要等待。但好處也很明顯,由于在客人正吃飯著的時候服務(wù)員不用閑著了,服務(wù)員這個時間內(nèi)可以為其他客人服務(wù)了,原來10個服務(wù)員最多同時為10桌客人服務(wù),現(xiàn)在可能為50桌,60客人服務(wù)了。

這種服務(wù)方式跟傳統(tǒng)的區(qū)別有兩個:

1、增加了一個角色,要有一個專門負(fù)責(zé)收集客人需求的人。NIO里對應(yīng)的就是Selector。

2、由阻塞服務(wù)方式改為非阻塞服務(wù)了,客人吃著的時候服務(wù)員不用一直侯在客人旁邊了。傳統(tǒng)的IO操作,比如read(),當(dāng)沒有數(shù)據(jù)可讀的時候,線程一直阻塞被占用,直到數(shù)據(jù)到來。NIO中沒有數(shù)據(jù)可讀時,read()會立即返回0,線程不會阻塞。 

NIO中,客戶端創(chuàng)建一個連接后,先要將連接注冊到Selector,相當(dāng)于客人進(jìn)入餐廳后,告訴前臺你要用餐,前臺會告訴你你的桌號是幾號,然后你就可能到那張桌子坐下了,SelectionKey就是桌號。當(dāng)某一桌需要服務(wù)時,前臺就記錄哪一桌需要什么服務(wù),比如1號桌要點(diǎn)菜,2號桌要結(jié)帳,服務(wù)員從前臺取一條記錄,根據(jù)記錄提供服務(wù),完了再來取下一條。這樣服務(wù)的時間就被最有效的利用起來了。

“Java NIO與傳統(tǒng)IO的區(qū)別是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI