【JAVA之NIO框架介绍】
Mina和Netty開始。因為這兩個NIO框架的創作者是同一個人Trustin Lee (韓國人)。GitHub主頁地址 :https://github.com/trustin。盡管創作者現在已經不專注與開發了。但是框架的后續開發和繼承,可以說都是符合最開始的設定的。兩個框架的架構設計思路基本一致。
?
Netty從某種程度上講是Mina的延伸和擴展。解決了一些Mina上的設計缺陷,也優化了一下Mina上面的設計理念。
?
xSocket:是一個輕量級的基于nio的服務器框架用于開發高性能、可擴展、多線程的服務器。該框架封裝了線程處理、異步讀/寫等方面。(只是對Java的NIO做了最簡單的封裝,以便于開發使用。)
?
Grizzly : 是一種應用程序框架,專門解決編寫成千上萬用戶訪問服務器時候產生的各種問題。使用JAVA NIO作為基礎,并隱藏其編程的復雜性。容易使用的高性能的API。帶來非阻塞socketd到協議處理層。利用高性能的緩沖和緩沖管理使用高性能的線程池。
?
The NIO Framework sits on top of the Java NIO library and hides most of the complexity of plain NIO. With the NIO Framework one can easily implement secure, high-performance Java network applications.
NIO Framework 是對 Java NIO 庫的封裝,將NIO的復雜度隱藏起來。有了它,人們可以方便地實現安全,高性能的Java網絡應用程序。
?
?
傳統RPC調用性能差的三宗罪
網絡傳輸方式問題:傳統的RPC框架或者基于RMI等方式的遠程服務(過程)調用采用了同步阻塞IO,當客戶端的并發壓力或者網絡時延增大之后,同步阻塞IO會由于頻繁的wait導致IO線程經常性的阻塞,由于線程無法高效的工作,IO處理能力自然下降。
序列化方式問題:Java序列化存在如下幾個典型問題:
1) Java序列化機制是Java內部的一種對象編解碼技術,無法跨語言使用;例如對于異構系統之間的對接,Java序列化后的碼流需要能夠通過其它語言反序列化成原始對象(副本),目前很難支持;
2) 相比于其它開源的序列化框架,Java序列化后的碼流太大,無論是網絡傳輸還是持久化到磁盤,都會導致額外的資源占用;
3) 序列化性能差(CPU資源占用高)。
線程模型問題:由于采用同步阻塞IO,這會導致每個TCP連接都占用1個線程,由于線程資源是JVM虛擬機非常寶貴的資源,當IO讀寫阻塞導致線程無法及時釋放時,會導致系統性能急劇下降,嚴重的甚至會導致虛擬機無法創建新的線程。
?
高性能的三個主題
1) 傳輸:用什么樣的通道將數據發送給對方,BIO、NIO或者AIO,IO模型在很大程度上決定了框架的性能。
2) 協議:采用什么樣的通信協議,HTTP或者內部私有協議。協議的選擇不同,性能模型也不同。相比于公有協議,內部私有協議的性能通常可以被設計的更優。
3) 線程:數據報如何讀取?讀取之后的編解碼在哪個線程進行,編解碼后的消息如何派發,Reactor線程模型的不同,對性能的影響也非常大。
?
總結
以上是生活随笔為你收集整理的【JAVA之NIO框架介绍】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP UD取消处理合订本
- 下一篇: Linux下PHP下载安装