Netty 介紹(一)
- 資料來源
- Netty是一個異步的、事件驅動的NIO FrameWork , 用以開發高性能高可用的網路IO程序
- 主要針對TCP協議下(UDP也可) , 面向Client端的高併發應用, 因為其為NIO封裝,所以需先了解JAVA NIO API
- 包含在微服務RPC框架、遊戲產業、大數據產業皆可使用
- BIO同步阻塞
- 到理髮店等待理髮師輪到自己
- Client每次連接皆新增線呈
- 串流的accept()、read()、write皆會造成網路延遲
- InputStream、OutputStream僅可單向
- NIO同步非阻塞
- 到理髮店發現排隊人多,請理髮師通知,自行先處理其他事情
- 一個線呈處理多個Client連接,多路復用
- 使用輪循機制等待channel事件發生,即資料到達才處理
- 三大元件: Selector、Channel、Buffer
- Selector會事件監聽器 , 每次處理完需刪除selectkey
- Channle可雙向讀寫 , 須額外開啟非阻塞
- Buffer讀寫用資料塊, flip()進行讀寫切換(position和limit刷新) , clear()進行整個刷新
- AIO異步非阻塞
- 打電話叫理髮師到家裡剪髮,自己先處理其他事情
- 前端例子:異步AJAX,因HTTP1.1提共的長連線特性,不必等待Server回應
- 後端例子:Spring 5 WebFluxu也提共了異步編程 , 當後端被呼叫時 , 後端並不會新起線程,而是透過後端的線程池進行處理
- 零拷貝
- 減少內存拷貝次數有助提升性能
- 所謂零拷貝指的是減少CPU COPY,無須從kernel buffer拷貝到socket buffer
沒有留言:
張貼留言