Netty 是一個由JBOSS提供的一個java開源框架,提供異步的、事件驅動的網絡應用程序框架和工具,用以快速開發高性能、高可靠性的網絡服務器和客戶端程序,是一個基於NIO的客戶、服務器端編程框架,快速和簡單的開發出一個網絡應用,例如實現了某種協議的客戶、服務端應用, 支持FTP、SMTP、HTTP等各類二進制文本協議java
總結以上廢話,以及網上各類資料,有如下幾點: web
對於零拷貝,就認爲他是提升IO速率、性能的一種技術,後續再繼續深刻研究便可算法
相對NIO,簡單擴展學習一下其餘的IO編程
NIO : 同步非阻塞IO , 在等待的同時,還能夠作其餘的事情,有選擇器,緩衝區,雙向通道等角色安全
好比現有客戶端client1,client2 ... ,還有一個server服務端,當發生通訊的時候,(selector)選擇器有本身的輪訓算法,當進行通訊,client1註冊到selector,出現一個Channel1;client2註冊到selector,也會出現一個Channel2,每一個客戶端註冊selector都會產生一個單獨Channel服務器
Channel是一個雙向通道,能夠進行數據的讀寫,讀寫的數據都會到緩衝區(Buffer)websocket
若是Channel1中沒有數據,就會直接跳過空數據通道,不等待,繼續Channel2網絡
selector是一個單線程,消耗低,通常能夠處理上萬的客戶端,客戶端的增長,並不會影響他的性能多線程
BIO : 同步阻塞IO , 早期就是排隊幹事, 後來優化利用線程池配合監聽機制,製造出一種僞異步IO併發
AIO : 異步非阻塞IO ,線程發起IO請求,當即返回,不等待消息, 執行內存繼續作IO操做,操做完成或者失敗,經過調用註冊的回調函數通知線程作IO操做完成或者失敗
Netty 能作什麼呢?
高可靠性的網絡服務器,優性能的客戶端程序應用,網絡應用程序,比較協議,還有websocket,後面會用websocket來學習實踐
若是直接上手NIO的話,須要具有Java多線程的知識,上手也比較困難,不易用,好比遇到網絡斷點,波動...
相對NIO,實用Netty更容易入手,自定製性比較強,性能很高,好比Dubbo,底層就是Netty
Netty 三種線程模型 Reactor
若是在高負載,高併發場景下,單線程的話,就會比較雞肋了,即便把機子的CUP都讓給他,這樣場景下消息的編解碼,接收,發送消息等處理,服務器就壓力大,好比超時,可能客戶端還會進行重試,最後服務器極可能會崩掉
使用多線程模型,那麼不得不想到,利用線程池也作管理調控,後面的讀寫操做,都由池裏的線程處理,這樣比單線程模型好不少,那麼人再多一點呢,百萬級別的呢,Netty也提供了另外一種模型
主線程池 處理客戶端的登陸,握手,安全認證等等,在鏈路創建完成時,將客戶端放入從線程池註冊,再將請求註冊到從線程池,由從線程池處理編解碼,讀寫等操做
該模型大大添加了併發性能處理請求,主從線程模型是官方推薦使用的設計模型
以上是簡單粗略的學習,繼續前進
-------------------------------------------------