Java面試BIO,NIO,AIO 的區別


既然你能看到這,說明你已經有JAVA基礎了,不然咋回去面試

 

同步&異步, 阻塞&非阻塞  基本了解

 

  • 同步(阻塞): 同步就是發起一個調用后,被調用者未處理完請求之前,調用不返回。 

  • 異步(非阻塞): 異步就是發起一個調用后,立刻得到被調用者的回應表示已接收到請求,但是被調用者並沒有返回結果,此時我們可以處理其他的請求,被調用者通常依靠事件,回調等機制來通知調用者其返回結果

 

 

BIO: (Blocking I/O)  - 阻塞IO 

也叫傳統IO

 

 

1) 先將文件內容從磁盤中拷貝到操作系統buffer

2) 再從操作系統buffer 拷貝到  程序應用(應用層)buffer

3) 從程序buffer拷貝到socket buffer

4) 從socket buffer拷貝到協議引擎.

傳統IO慢的原因是因為,數據搗騰過好幾遍,才走到socket中

 

 

NIO (New I/O)   - 非阻塞IO

nio 是New IO 的簡稱,在jdk1.4 里提供的新api 。Sun 官方標榜的特性如下: 為所有的原始類型提供(Buffer)緩存支持。字符集編碼解碼解決方案。 Channel :一個新的原始I/O 抽象。 支持鎖和內存映射文件的文件訪問接口。 提供多路(non-bloking) 非阻塞式的高伸縮性網絡I/O

 

 

NIO不經過應用層的緩存,數據直接放在操作系統的緩存,應用層只是直接發送指令,讓操作系統Read buffer 直接寫到Socket Buffer .少了內核到應用層之間過渡。

 

 

AIO (Asynchronous I/O) - 異步IO

JDK1.7里面叫AIO, JDK1.5叫NIO,AIO才叫做異步IO,NIO其實並不是真正意義上的異步IO,NIO只是非阻塞IO。

 

AIO連系統緩存buffer都省了,在外層建立NMAP的映射,數據地址用一個內存地址,地址不需要倒騰復制。直接讀進來直接出去使用。

 

推薦學習資料:

netty權威指南 (會把NIO,AIO原理講下)

netty in action

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM