- Netty權(quán)威指南
- 李林鋒
- 926字
- 2024-01-05 16:20:01
1.2 Java的I/O演進
在JDK 1.4推出Java NIO之前,基于Java的所有Socket通信都采用了同步阻塞模式(BIO),這種一請求一應(yīng)答的通信模型簡化了上層的應(yīng)用開發(fā),但是在性能和可靠性方面卻存在著巨大的瓶頸。因此,在很長一段時間里,大型的應(yīng)用服務(wù)器都采用C或者C++語言開發(fā),因為它們可以直接使用操作系統(tǒng)提供的異步I/O或者AIO能力。當并發(fā)訪問量增大、響應(yīng)時間延遲增大之后,采用Java BIO開發(fā)的服務(wù)端軟件只有通過硬件的不斷擴容來滿足高并發(fā)和低時延,它極大地增加了企業(yè)的成本,并且隨著集群規(guī)模的不斷膨脹,系統(tǒng)的可維護性也面臨巨大的挑戰(zhàn),只能通過采購性能更高的硬件服務(wù)器來解決問題,這會導(dǎo)致惡性循環(huán)。
正是由于Java傳統(tǒng)BIO的拙劣表現(xiàn),才使得Java支持非阻塞I/O的呼聲日漸高漲,最終,JDK1.4版本提供了新的NIO類庫,Java終于也可以支持非阻塞I/O了。
Java的I/O發(fā)展簡史
從JDK1.0到JDK1.3,Java的I/O類庫都非常原始,很多UNIX網(wǎng)絡(luò)編程中的概念或者接口在I/O類庫中都沒有體現(xiàn),例如Pipe、Channel、Buffer和Selector等。2002年發(fā)布JDK1.4時,NIO以JSR-51的身份正式隨JDK發(fā)布。它新增了個java.nio包,提供了很多進行異步I/O開發(fā)的API和類庫,主要的類和接口如下。
◎ 進行異步I/O操作的緩沖區(qū)ByteBuffer等;
◎ 進行異步I/O操作的管道Pipe;
◎ 進行各種 I/O 操作(異步或者同步)的 Channel,包括 ServerSocketChannel 和SocketChannel;
◎ 多種字符集的編碼能力和解碼能力;
◎ 實現(xiàn)非阻塞I/O操作的多路復(fù)用器selector;
◎ 基于流行的Perl實現(xiàn)的正則表達式類庫;
◎ 文件通道FileChannel。
新的NIO類庫的提供,極大地促進了基于Java的異步非阻塞編程的發(fā)展和應(yīng)用,但是,它依然有不完善的地方,特別是對文件系統(tǒng)的處理能力仍顯不足,主要問題如下。
◎ 沒有統(tǒng)一的文件屬性(例如讀寫權(quán)限);
◎ API能力比較弱,例如目錄的級聯(lián)創(chuàng)建和遞歸遍歷,往往需要自己實現(xiàn);
◎ 底層存儲系統(tǒng)的一些高級API無法使用;
◎ 所有的文件操作都是同步阻塞調(diào)用,不支持異步文件讀寫操作。
2011年7月28日,JDK1.7正式發(fā)布。它的一個比較大的亮點就是將原來的NIO類庫進行了升級,被稱為NIO2.0。NIO2.0由JSR-203演進而來,它主要提供了如下三個方面的改進。
◎ 提供能夠批量獲取文件屬性的API,這些API具有平臺無關(guān)性,不與特性的文件系統(tǒng)相耦合,另外它還提供了標準文件系統(tǒng)的SPI,供各個服務(wù)提供商擴展實現(xiàn);
◎ 提供AIO功能,支持基于文件的異步I/O操作和針對網(wǎng)絡(luò)套接字的異步操作;
◎ 完成JSR-51定義的通道功能,包括對配置和多播數(shù)據(jù)報的支持等。
- GitLab CI/CD 從入門到實戰(zhàn)
- 軟件需求與可視化模型(微軟技術(shù)叢書)
- QTP自動化測試最佳實踐
- DevSecOps企業(yè)級實踐:理念、技術(shù)與案例
- DevOps:企業(yè)級CI/CD實戰(zhàn)
- Cadence系統(tǒng)級封裝設(shè)計:Allegro SiP/APD設(shè)計指南
- 軟件研發(fā)效能提升之美
- Swift開發(fā)實戰(zhàn)
- 軟件秘笈:設(shè)計模式那點事
- 負載均衡:高并發(fā)網(wǎng)關(guān)設(shè)計原理與實踐
- 軟件測試項目實戰(zhàn)
- Apache Cordova移動應(yīng)用開發(fā)實戰(zhàn)
- MATLAB之幻方
- PHP從入門到精通(第6版)
- 開源之迷