一、BIO
BIO 撕予,Block-IO 鲫惶,阻塞、同步的通信模式实抡。
優(yōu)勢(shì):模式簡(jiǎn)單欠母,使用方便
劣勢(shì):并發(fā)處理能力低,通信耗時(shí)吆寨,依賴網(wǎng)速
原理:
1.一請(qǐng)求一應(yīng)答:服務(wù)端通過(guò)Acceptor線程艺蝴,監(jiān)聽(tīng)客戶端請(qǐng)求并處理
2.偽異步IO:引入線程池
BIO的主要API:Socket、ServerSocket
二鸟废、NIO
New IO/Non-Block IO,非阻塞猜敢、同步的通信模式。
優(yōu)勢(shì):通過(guò)一個(gè)線程,處理大量客戶端的請(qǐng)求缩擂。
原理:
客戶端和服務(wù)端通過(guò)channel通信鼠冕,NIO可以通過(guò)channel進(jìn)行讀和寫操作。多個(gè)channel被注冊(cè)到一個(gè)selecor(多路復(fù)用器)上胯盯,selector通過(guò)一個(gè)線程不斷輪詢channel懈费,找出準(zhǔn)備就緒的channel進(jìn)行IO操作。
NIO與BIO實(shí)現(xiàn)上的區(qū)別:
- 緩沖區(qū)Buffer:
- 是將數(shù)據(jù)直接寫入或讀取到流 Stream 對(duì)象中博脑。
- NIO 的數(shù)據(jù)操作都是在 Buffer 中進(jìn)行的憎乙。Buffer 實(shí)際上是一個(gè)數(shù)組。Buffer 最常見(jiàn)的類型是ByteBuffer叉趣,另外還有 CharBuffer泞边,ShortBuffer,IntBuffer疗杉,LongBuffer阵谚,F(xiàn)loatBuffer,DoubleBuffer烟具。
- 通道 Channel :
1.Channel是雙向的梢什,Stream流是單向的。支持同時(shí)讀寫朝聋。
2.Channel分類:一類是網(wǎng)絡(luò)讀寫(SelectableChannel)嗡午,一類是用于文件操作(FileChannel)。我們使用的是前者 SocketChannel 和 ServerSocketChannel 冀痕,都是SelectableChannel 的子類荔睹。
- 多路復(fù)用器 Selector:
NIO變成的關(guān)鍵。
三金度、AIO
Asynchronous IO,是一種非阻塞严沥、異步的通信模式猜极。
原理:
AIO 并沒(méi)有采用 NIO 的多路復(fù)用器,而是使用異步通道的概念消玄。其 read跟伏,write 方法的返回類型,都是 Future 對(duì)象翩瓜。而 Future 模型是異步的受扳,其核心思想是:去主函數(shù)等待時(shí)間。
AIO主要API:
AIO 模型中通過(guò) AsynchronousSocketChannel 和 AsynchronousServerSocketChannel 實(shí)現(xiàn)套接字通道的通信兔跌。非阻塞勘高,異步。
四、需要理解的問(wèn)題华望。
1.BIO為1對(duì)1蕊蝗,那么NIO呢?
個(gè)人理解赖舟,BIO的1對(duì)1蓬戚,是指,一個(gè)請(qǐng)求直到IO操作完成(不包含業(yè)務(wù)處理)這個(gè)過(guò)程宾抓,都是同一個(gè)線程進(jìn)行處理子漩。
而NIO,對(duì)于多個(gè)連接石洗,只需要一個(gè)線程進(jìn)行監(jiān)聽(tīng)幢泼,IO操作可以交給其他線程處理。
2.什么是同步和異步劲腿?
同步:指方法由當(dāng)前線程執(zhí)行旭绒。同步IO指數(shù)據(jù)拷貝由當(dāng)前線程完成。
異步:指方法不由本線程執(zhí)行焦人。異步IO指數(shù)據(jù)拷貝由操作系統(tǒng)完成挥吵。
3.什么是阻塞和非阻塞?
阻塞:指方法調(diào)阻塞用等待花椭,執(zhí)行完之后才返回忽匈。
非阻塞:指方法不需等待執(zhí)行完,立即返回矿辽。