Netty權威指南:Java的I/O演進
在JDK1.4推出
JavaNIO之前,基於Java的所有
Socket通訊都採用了同步阻塞模式(BIO)
,這種
一請求一應答的通訊模型簡化了上層的應用開發,但是在效能和可靠性方面卻存在著巨大的瓶頸。因此,在很長一段時間裡,大型的應用伺服器都採用C或者C++語言開發,因為它們可以直接使用作業系統提供的非同步I/O或者AIO能力。當併發訪問量增大、響應時間延遲增大之後,採用JavaBIO開發的服務端軟體只有透過硬體的不斷擴容來滿足高併發和低時延,它極大地增加了企業的成本,並且隨著叢集規模的不斷膨脹,系統的可維護性也面臨巨大的挑戰,只能透過採購效能更高的硬體伺服器來解決問題,這會導致惡性迴圈。
正是由於Java傳統BIO的拙劣表現,才使得Java支援非阻塞I/O 的呼聲日漸高漲,最終,JDK1.4 版本提供了新的NIO類庫,Java終於也可以支援非阻塞I/0了。
Java的I/O發展簡史
從JDK1.0到JDK1.3,Java 的 I/O類庫都非常原始,很多UNIX網路程式設計中的概念或者介面在I/O類庫中都沒有體現,例如Pipe、Channel、Buffer 和Selector等。2002 年釋出JDK1.4時,NIO以JSR-51的身份正式隨JDK釋出。它新增了個
java.nio
包,提供了很多進行非同步I/O開發的API和類庫,主要的類和介面如下。
- 進行非同步
I/O
操作的緩衝區ByteBuffer等; - 進行非同步
I/O
操作的管道Pipe; - 進行各種
I/O
操作(非同步或者同步)的Channel, 包括ServerSocketChannel
和SocketChannel
; - 多種字符集的編碼能力和解碼能力;
- 實現非阻塞
I/O
操作的多路複用器selector; - 基於流行的
Perl
實現的正規表示式類庫; - 檔案通道
FileChannel
;
新的NIO類庫的提供,極大地促進了基於Java的非同步非阻塞程式設計的發展和應用,但是,它依然有不完善的地方,特別是對檔案系統的處理能力仍顯不足,主要問題如下。
- 提供能夠批次獲取檔案屬性的API,這些API具有平臺無關性,不與特性的檔案系統相耦合。另外它還提供了標準檔案系統的SPI, 供各個服務提供商擴充套件實現;
- 提供AIO功能,支援基於檔案的非同步I/O操作和針對網路套接字的非同步操作;
- 完成JSR-51定義的通道功能,包括對配置和多播資料包的支援等。
喜歡這篇文章的朋友們可以關注個人簡介中的公眾號
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2766624/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Netty權威指南:I/O 多路複用技術Netty
- Netty權威指南:Linux網路 I/O 模型簡介NettyLinux模型
- Java 13權威指南 - CodeFXJava
- Java I/OJava
- 【java】I/O流Java
- Java(8)I/OJava
- 從網路I/O模型到Netty,先深入瞭解下I/O多路複用模型Netty
- JAVA I/O系統Java
- Java 非同步 I/OJava非同步
- JavaScript 日期權威指南JavaScript
- Java™ 教程(命令列I/O)Java命令列
- [譯] JAVASCRIPT 日期權威指南JavaScript
- JavaScript權威指南(6)——物件JavaScript物件
- 深入理解Java I/O模型Java模型
- "萬字" Java I/O 詳解Java
- Elasticsearch 權威指南(中文版)Elasticsearch
- javascript權威指南——函式篇JavaScript函式
- HBase權威指南【中文版】
- JavaScript權威指南(8)——函式JavaScript函式
- JavaScript權威指南(7)——陣列JavaScript陣列
- 微服務入門權威指南微服務
- 【雜談】Java I/O的底層實現Java
- HTML5權威指南——CSS的長度HTMLCSS
- Java I/O模型及其底層原理Java模型
- 《Java 高階篇》六:I/O 流Java
- 《Excelize 權威指南》新書釋出Excelize新書
- 計算機I/O與I/O模型計算機模型
- Hadoop的I/O操作Hadoop
- 沒搞清楚網路I/O模型?那怎麼入門Netty模型Netty
- Java NIO學習系列五:I/O模型Java模型
- JavaScript權威指南(9)——類和模組JavaScript
- JavaScript權威指南(2)——詞法結構JavaScript
- 《Android Gradle權威指南》之Gradle入門AndroidGradle
- 《IDA pro權威指南》閱讀筆記筆記
- 留學指南權威乾貨與攻略!
- 作業系統I/O模型及輪詢技術演變作業系統模型
- I/O流
- JavaScript權威指南(11)——JavaScript的子集和擴充套件JavaScript套件