清華畢業大佬深解析從入門到百萬年薪:IO模型與Netty,總計1.89G

前言

IO

(1)同步阻塞IO(Blocking IO):即傳統的IO模型。

(2)同步非阻塞IO(Non-blocking IO):默認創建的socket都是阻塞的,非阻塞IO要求socket被設置為NONBLOCK。注意這裡所說的NIO並非Java的NIO(New IO)庫。

(3)IO多路複用(IO Multiplexing):即經典的Reactor設計模式,有時也稱為異步阻塞IO,Java中的Selector和Linux中的epoll都是這種模型。

(4)異步IO(Asynchronous IO):即經典的Proactor設計模式,也稱為異步非阻塞IO。

同步和異步的概念描述的是用戶線程與內核的交互方式:同步是指用戶線程發起IO請求後需要等待或者輪詢內核IO操作完成後才能繼續執行;而異步是指用戶線程發起IO請求後仍繼續執行,當內核IO操作完成後會通知用戶線程,或者調用用戶線程註冊的回調函數。

阻塞和非阻塞的概念描述的是用戶線程調用內核IO操作的方式:阻塞是指IO操作需要徹底完成後才返回到用戶空間;而非阻塞是指IO操作被調用後立即返回給用戶一個狀態值,無需等到IO操作徹底完成。

Netty是由JBOSS提供的一個java開源框架,現為Github上的獨立項目。Netty提供異步的、事件驅動的網絡應用程序框架和工具,用以快速開發高性能、高可靠性的網絡服務器和客戶端程序。

也就是說,Netty 是一個基於NIO的客戶、服務器端的編程框架,使用Netty 可以確保你快速和簡單的開發出一個網絡應用,例如實現了某種協議的客戶、服務端應用。Netty相當於簡化和流線化了網絡應用的編程開發過程,例如:基於TCP和UDP的socket服務開發。

“快速”和“簡單”並不用產生維護性或性能上的問題。Netty 是一個吸收了多種協議(包括FTP、SMTP、HTTP等各種二進制文本協議)的實現經驗,並經過相當精心設計的項目。最終,Netty 成功的找到了一種方式,在保證易於開發的同時還保證了其應用的性能,穩定性和伸縮性。


清華畢業大佬深解析從入門到百萬年薪:IO模型與Netty,總計1.89G

Netty網絡線程模型

主要有兩類線程組成: boss 線程、worker 線程。啟動一個server實例只會產生一個boss線程,boss 線程主要負責監聽端口,當有新的連接請求時就會產生一個task交給worker線程池處理, worker線程池中線程的個數默認是cpu個數的2倍。

清華畢業大佬深解析從入門到百萬年薪:IO模型與Netty,總計1.89G

網絡/0操作採用了目前流行的1/0多路選擇器Seletor方式(具系統的實現來決定的)。

集的規員的還是2 ip是遠國成機根據真你是列等),每個隊列中實際上都註冊著一些IntereWorker線程池中每個線程都維護幾個處理從列(如主冊隊列,寫任務隊線程不斷的循環地做ssalect操作,boss線程不斷地將rsP(感興趣的操作集),worketwork線程的註冊隊列中,每次都是新的連接請求註冊到一一個是輪詢出vorker線程池中的一個線程:

1.NioWorker nextWorker0 {

2.

3.workers. length)]:

return. workers [Math. abs

ForkerIndex. getAndInerement() %

}

又有新的連接請求械boss線程加到相應的雅換請求程中如果e操作結果大空則會主動遇出,當

程又會重新啟動。

worker線程的隊列時,該worker線這裡在處理線程間同步和互時用了2個鎖:

1.一個sterted標誌,主要用於判斷當前線程是否已經啟動,當boss線程選擇了一個oker線程後,想把新請求加入到該worker線程的新請求隊時若該56則表示該woae線程沒有有啟動,所以要先啟動worker線程,若startede則表示該worker線程已啟動,則直接把請求加入到該oer線程的清求以列就就行了。當sorker線程的隊列中沒有了操作,即為空時,oter鐵程會主動遇出,並設五步,所以使用了出,所以使用”敬對於5 eo線程和ohe線程問費進行同

2.synchronisedGtartStopLoclsletor選擇器操作本身是同步的,但對el1onkey的操作則需要進行同步控制,所以又用到了一個鎖: selectorGuard =neReentrantReadWriteLockO

第一個是互斥鎖;第二個是讀寫鎖。

每個worker線程各自使用-一個,slee即每個vosker 線程的請求隊列中所有的新請求(即一個ScekChecoe中註冊感興趣的選擇鍵集。都會在該worker線程的slet

源碼層面無死角解析NETTY學習路線

清華畢業大佬深解析從入門到百萬年薪:IO模型與Netty,總計1.89G

從入門到百萬年薪:IO模型與Netty1.89G學習視頻

清華畢業大佬深解析從入門到百萬年薪:IO模型與Netty,總計1.89G

Netty實戰和權威指南技術文檔

清華畢業大佬深解析從入門到百萬年薪:IO模型與Netty,總計1.89G

需要從入門到百萬年薪:IO模型與Netty1.89G學習視頻、Netty實戰和權威指南技術文檔的小夥伴。轉發關注小編,私信小編“學習”得到獲取方式吧~~~


分享到:


相關文章: