-
BIO通信模型圖
查看全部 -
BIO通信:采用BIO模型通信的服務(wù)端,通常由一個(gè)獨(dú)立的線程負(fù)責(zé)監(jiān)聽客戶端的連接,它接收到客戶端連接請(qǐng)求之后,會(huì)對(duì)每個(gè)客戶端創(chuàng)建一個(gè)新的線程,進(jìn)行鏈路處理,處理完成之后通過輸出流返回應(yīng)答給客戶端,此時(shí)線程銷毀,這就是典型的”一請(qǐng)求一應(yīng)答“的通信模型。該模型的最大缺點(diǎn)就是:缺乏彈性伸縮能力,當(dāng)客戶端并發(fā)訪問量增加以后,服務(wù)端的線程個(gè)數(shù)和客戶端的并發(fā)訪問數(shù)會(huì)成1比1的正比關(guān)系,由于線程是Java虛擬機(jī)的寶貴系統(tǒng)資源,當(dāng)線程數(shù)膨脹之后,系統(tǒng)的性能就會(huì)快速下降。隨著并發(fā)訪問量的繼續(xù)增大,系統(tǒng)將會(huì)發(fā)生線程堆棧異?;騽?chuàng)建線程失敗等問題。最終導(dǎo)致進(jìn)程宕機(jī)或?qū)⑺?,不能?duì)外提供服務(wù)。
查看全部 -
Netty使用場(chǎng)景:
高性能領(lǐng)域:比如游戲,大數(shù)據(jù)分布式計(jì)算得以廣泛應(yīng)用
多線程并發(fā)領(lǐng)域:多路復(fù)用模型,多線程模型,主從多線程模型
異步通信領(lǐng)域:
查看全部 -
什么是Netty?
Netty是一個(gè)高性能事件驅(qū)動(dòng),異步非阻塞的IO Java開源框架,由Jboss提供,用于建立Tcp等底層的鏈接,基于Netty可以建立高性能的Http服務(wù)器,快速開發(fā)高性能、高可靠的網(wǎng)絡(luò)服務(wù)器和客戶端程序。支持Http、websocket,tcp,udp等協(xié)議。同時(shí)Netty又是基于NIO的客戶端,服務(wù)器端編程框架,使用Netty可以確??焖俸秃?jiǎn)單的開發(fā)出一個(gè)網(wǎng)絡(luò)應(yīng)用。例如實(shí)現(xiàn)了某種協(xié)議的客戶端服務(wù)端應(yīng)用。Netty簡(jiǎn)化了網(wǎng)絡(luò)應(yīng)用的開發(fā)過程,比如tcp,udp的socket服務(wù)開發(fā)。同時(shí)Netty提供了非??煽康姆€(wěn)定性和良好的伸縮性。
查看全部 -
aio通信模型
查看全部 -
nio通信模型
查看全部 -
偽異步io通信模型
查看全部 -
bio通信模型
查看全部 -
bio相關(guān)概念
查看全部 -
666
template class methods
查看全部 -
epoll是Linux內(nèi)核為處理大批量文件描述符而作了改進(jìn)的poll,是Linux下多路復(fù)用IO接口select/poll的增強(qiáng)版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率。另一點(diǎn)原因就是獲取事件的時(shí)候,它無須遍歷整個(gè)被偵聽的描述符集,只要遍歷那些被內(nèi)核IO事件異步喚醒而加入Ready隊(duì)列的描述符集合就行了。epoll除了提供select/poll那種IO事件的水平觸發(fā)(Level Triggered)外,還提供了邊緣觸發(fā)(Edge Triggered),這就使得用戶空間程序有可能緩存IO狀態(tài),減少epoll_wait/epoll_pwait的調(diào)用,提高應(yīng)用程序效率。
查看全部 -
BIO通信:服務(wù)端接收到客戶端的請(qǐng)求之后,為每一個(gè)客戶端創(chuàng)建一個(gè)線程進(jìn)行處理,通過輸出流把應(yīng)答發(fā)送給客戶端,最后銷毀線程。(1對(duì)1,阻塞同步的IO)
偽異步IO通信:當(dāng)有新的客戶端接入的時(shí)候,將客戶端的socket封裝成一個(gè)task投遞到后端的線程池進(jìn)行處理,線程池維護(hù)一個(gè)消息隊(duì)列和N個(gè)活躍的線程,對(duì)消息隊(duì)列中的任務(wù)進(jìn)行相關(guān)的處理。(M對(duì)N,阻塞同步的IO)
NIO通信:在面向流的IO中可以將數(shù)據(jù)直接寫入或者將數(shù)據(jù)直接讀到Stream對(duì)象中,在NIO中,所有數(shù)據(jù)都是用緩沖區(qū)進(jìn)行處理的,在讀取數(shù)據(jù)時(shí),直接讀緩沖區(qū)中,在寫入數(shù)據(jù)時(shí),是直接寫入緩沖區(qū)中。任何時(shí)候處理NIO中的數(shù)據(jù)時(shí)都是通過緩沖區(qū)進(jìn)行操作。網(wǎng)絡(luò)數(shù)據(jù)通過Channel讀取和寫入。selector提供了選擇已經(jīng)就緒的任務(wù)的能力,會(huì)通過不斷輪詢?cè)谄渖系腃hannel,在某個(gè)Channel上面發(fā)生讀或者寫事件,則該Channel處于就緒狀態(tài),會(huì)被Selector輪詢出來,然后獲取Channel的集合進(jìn)行后續(xù)的操作。(M對(duì)1,非阻塞同步的IO)
AIO通信:AIO的異步套接自通道,是真正的異步非阻塞IO,對(duì)應(yīng)于Unix網(wǎng)絡(luò)編程中的事件驅(qū)動(dòng)IO,不需要通過多路復(fù)用器對(duì)被注冊(cè)的通道進(jìn)行輪詢操作即可實(shí)現(xiàn)異步讀寫,從而簡(jiǎn)化NIO的編程模型。(M對(duì)0,非阻塞異步IO)
查看全部 -
異步通訊查看全部
-
定制,擴(kuò)展查看全部
-
JDK的NIO存在select空輪詢BUG,不過在jdk1.8中修復(fù)了查看全部
舉報(bào)