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 I/O 模型的演進Java模型
- Netty權威指南Netty
- Java 13權威指南 - CodeFXJava
- java的I/OJava
- 從 I/O 模型到 Netty(二)模型Netty
- 從 I/O 模型到 Netty(一)模型Netty
- 從 I/O 模型到 Netty(三)模型Netty
- Git權威指南Git
- HTTP權威指南HTTP
- Java I/OJava
- JavaScript 日期權威指南JavaScript
- 《ZeroC Ice權威指南》
- 讀《Cassandra權威指南》
- Java(8)I/OJava
- 【java】I/O流Java
- Java I/O流Java
- RPM包的權威指南。
- 從網路I/O模型到Netty,先深入瞭解下I/O多路複用模型Netty
- JavaScript權威指南(6)——物件JavaScript物件
- [譯] JAVASCRIPT 日期權威指南JavaScript
- JavaScript權威指南-陣列JavaScript陣列
- Java 非同步 I/OJava非同步
- JAVA I/O系統Java
- JavaScript權威指南(8)——函式JavaScript函式
- JavaScript權威指南(7)——陣列JavaScript陣列
- Elasticsearch 權威指南(中文版)Elasticsearch
- javascript權威指南——函式篇JavaScript函式
- HBase權威指南【中文版】
- 微服務入門權威指南微服務
- 《http權威指南》學習感想HTTP
- ORACLE11G權威指南Oracle
- 小編薦書——Java效能問題的免疫魔法《Java效能優化權威指南》Java優化
- Java™ 教程(命令列I/O)Java命令列
- Java基礎——I/O流Java
- java 淺析I/O模型Java模型
- [圖靈贈書]《Java效能權威指南》轉發贈書圖靈Java