資料內(nèi)容:
1. 什么是IO
Java中I/O是以流為基礎(chǔ)進行數(shù)據(jù)的輸入輸出的,所有數(shù)據(jù)被串行化(所謂串行化就是數(shù)據(jù)要按順序進行輸入
輸出)寫入輸出流。簡單來說就是java通過io流方式和外部設(shè)備進行交互。
在Java類庫中,IO部分的內(nèi)容是很龐大的,因為它涉及的領(lǐng)域很廣泛:標(biāo)準(zhǔn)輸入輸出,文件的操作,網(wǎng)絡(luò)上
的數(shù)據(jù)傳輸流,字符串流,對象流等等等。
比如程序從服務(wù)器上下載圖片,就是通過流的方式從網(wǎng)絡(luò)上以流的方式到程序中,在到硬盤中。
2. 同步與異步,阻塞與非阻塞的區(qū)別
同步,一個任務(wù)的完成之前不能做其他操作,必須等待(等于在打電話)
異步,一個任務(wù)的完成之前,可以進行其他操作(等于在聊QQ)
阻塞,是相對于CPU來說的, 掛起當(dāng)前線程,不能做其他操作只能等待
非阻塞,,無須掛起當(dāng)前線程,可以去執(zhí)行其他操作
3. 什么是BIO
BIO:同步并阻塞,服務(wù)器實現(xiàn)一個連接一個線程,即客戶端有連接請求時服務(wù)器端就需要啟動一個線程進
行處理,沒處理完之前此線程不能做其他操作(如果是單線程的情況下,我傳輸?shù)奈募艽竽??),?dāng)然可
以通過線程池機制改善。BIO方式適用于連接數(shù)目比較小且固定的架構(gòu),這種方式對服務(wù)器資源要求比較
高,并發(fā)局限于應(yīng)用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。
4. 什么是NIO
NIO:同步非阻塞,服務(wù)器實現(xiàn)一個連接一個線程,即客戶端發(fā)送的連接請求都會注冊到多路復(fù)用器上,多
路復(fù)用器輪詢到連接有I/O請求時才啟動一個線程進行處理。NIO方式適用于連接數(shù)目多且連接比較短(輕操
作)的架構(gòu),比如聊天服務(wù)器,并發(fā)局限于應(yīng)用中,編程比較復(fù)雜,JDK1.4之后開始支持。
5.什么是AIO
AIO:異步非阻塞,服務(wù)器實現(xiàn)模式為一個有效請求一個線程,客戶端的I/O請求都是由操作系統(tǒng)先完成了再
通知服務(wù)器應(yīng)用去啟動線程進行處理,AIO方式使用于連接數(shù)目多且連接比較長(重操作)的架構(gòu),比如相
冊服務(wù)器,充分調(diào)用操作系統(tǒng)參與并發(fā)操作,編程比較復(fù)雜,JDK1.7之后開始支持。.
AIO屬于NIO包中的類實現(xiàn),其實IO主要分為BIO和NIO,AIO只是附加品,解決IO不能異步的實現(xiàn)在以前很
少有Linux系統(tǒng)支持AIO,Windows的IOCP就是該AIO模型。但是現(xiàn)在的服務(wù)器一般都是支持AIO操作
6. 什么Netty
Netty是由JBOSS提供的一個Java開源框架。Netty提供異步的、事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以
快速開發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序。Netty 是一個基于NIO的客戶、服務(wù)器端編程框
架,使用Netty 可以確保你快速和簡單的開發(fā)出一個網(wǎng)絡(luò)應(yīng)用,例如實現(xiàn)了某種協(xié)議的客戶,服務(wù)端應(yīng)用。
Netty相當(dāng)簡化和流線化了網(wǎng)絡(luò)應(yīng)用的編程開發(fā)過程,例如,TCP和UDP的socket服務(wù)開發(fā)。
Netty是由NIO演進而來,使用過NIO編程的用戶就知道NIO編程非常繁重,Netty是能夠能跟好的使用NIO。