【JAVA之NIO框架介绍】
Mina和Netty開(kāi)始。因?yàn)檫@兩個(gè)NIO框架的創(chuàng)作者是同一個(gè)人Trustin Lee (韓國(guó)人)。GitHub主頁(yè)地址 :https://github.com/trustin。盡管創(chuàng)作者現(xiàn)在已經(jīng)不專注與開(kāi)發(fā)了。但是框架的后續(xù)開(kāi)發(fā)和繼承,可以說(shuō)都是符合最開(kāi)始的設(shè)定的。兩個(gè)框架的架構(gòu)設(shè)計(jì)思路基本一致。
?
Netty從某種程度上講是Mina的延伸和擴(kuò)展。解決了一些Mina上的設(shè)計(jì)缺陷,也優(yōu)化了一下Mina上面的設(shè)計(jì)理念。
?
xSocket:是一個(gè)輕量級(jí)的基于nio的服務(wù)器框架用于開(kāi)發(fā)高性能、可擴(kuò)展、多線程的服務(wù)器。該框架封裝了線程處理、異步讀/寫等方面。(只是對(duì)Java的NIO做了最簡(jiǎn)單的封裝,以便于開(kāi)發(fā)使用。)
?
Grizzly : 是一種應(yīng)用程序框架,專門解決編寫成千上萬(wàn)用戶訪問(wèn)服務(wù)器時(shí)候產(chǎn)生的各種問(wèn)題。使用JAVA NIO作為基礎(chǔ),并隱藏其編程的復(fù)雜性。容易使用的高性能的API。帶來(lái)非阻塞socketd到協(xié)議處理層。利用高性能的緩沖和緩沖管理使用高性能的線程池。
?
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 是對(duì) Java NIO 庫(kù)的封裝,將NIO的復(fù)雜度隱藏起來(lái)。有了它,人們可以方便地實(shí)現(xiàn)安全,高性能的Java網(wǎng)絡(luò)應(yīng)用程序。
?
?
傳統(tǒng)RPC調(diào)用性能差的三宗罪
網(wǎng)絡(luò)傳輸方式問(wèn)題:傳統(tǒng)的RPC框架或者基于RMI等方式的遠(yuǎn)程服務(wù)(過(guò)程)調(diào)用采用了同步阻塞IO,當(dāng)客戶端的并發(fā)壓力或者網(wǎng)絡(luò)時(shí)延增大之后,同步阻塞IO會(huì)由于頻繁的wait導(dǎo)致IO線程經(jīng)常性的阻塞,由于線程無(wú)法高效的工作,IO處理能力自然下降。
序列化方式問(wèn)題:Java序列化存在如下幾個(gè)典型問(wèn)題:
1) Java序列化機(jī)制是Java內(nèi)部的一種對(duì)象編解碼技術(shù),無(wú)法跨語(yǔ)言使用;例如對(duì)于異構(gòu)系統(tǒng)之間的對(duì)接,Java序列化后的碼流需要能夠通過(guò)其它語(yǔ)言反序列化成原始對(duì)象(副本),目前很難支持;
2) 相比于其它開(kāi)源的序列化框架,Java序列化后的碼流太大,無(wú)論是網(wǎng)絡(luò)傳輸還是持久化到磁盤,都會(huì)導(dǎo)致額外的資源占用;
3) 序列化性能差(CPU資源占用高)。
線程模型問(wèn)題:由于采用同步阻塞IO,這會(huì)導(dǎo)致每個(gè)TCP連接都占用1個(gè)線程,由于線程資源是JVM虛擬機(jī)非常寶貴的資源,當(dāng)IO讀寫阻塞導(dǎo)致線程無(wú)法及時(shí)釋放時(shí),會(huì)導(dǎo)致系統(tǒng)性能急劇下降,嚴(yán)重的甚至?xí)?dǎo)致虛擬機(jī)無(wú)法創(chuàng)建新的線程。
?
高性能的三個(gè)主題
1) 傳輸:用什么樣的通道將數(shù)據(jù)發(fā)送給對(duì)方,BIO、NIO或者AIO,IO模型在很大程度上決定了框架的性能。
2) 協(xié)議:采用什么樣的通信協(xié)議,HTTP或者內(nèi)部私有協(xié)議。協(xié)議的選擇不同,性能模型也不同。相比于公有協(xié)議,內(nèi)部私有協(xié)議的性能通常可以被設(shè)計(jì)的更優(yōu)。
3) 線程:數(shù)據(jù)報(bào)如何讀取?讀取之后的編解碼在哪個(gè)線程進(jìn)行,編解碼后的消息如何派發(fā),Reactor線程模型的不同,對(duì)性能的影響也非常大。
?
總結(jié)
以上是生活随笔為你收集整理的【JAVA之NIO框架介绍】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SAP UD取消处理合订本
- 下一篇: 创灵原始与鸿蒙,上古启示录