Tomcat 效能優化__4大通道原理
阿新 • • 發佈:2022-03-26
一. NIO 通道工作原理
Acceptor(tomcat9版本獨立出來了)>> PollerEvent >> Poller(相當於是reactor) >> Worker(exec即SocketProcessor)
1)、Acceptor執行緒將socketchannel取出, 傳遞給Poller執行緒(會產生執行緒阻塞,因此包裝成PollEvent加入快取佇列)。
2)、Poller執行緒執行的就是NIO的selectkey,拿到通道中感興趣的事件,輪詢獲取,然後將感興趣的selectkey和keyattachment傳遞給工作執行緒池進行處理。 3)、工作執行緒池呼叫http11ConnectionHandler進行http協議的解析,然後將解析出來的內容包裝成Request,Reponse物件,傳遞給分界點CoyoteAdapter,最終執行到業務中。
二. BIO 通道工作原理
BIO的流程基本上和NIO通道一樣,BIO的結構因為缺少了selector和輪詢,相比NIO少了一部分的內容,整體上就是使用的ServerSocket來進行通訊的,一執行緒一請求的模式,程式碼看起來清晰易懂。但是,由於BIO的模型比較落後,在大多數的場景下,不如NIO,而現在Tomcat新版本也是NIO是預設的配置,8.5版本之後完全拋棄了BIO通道。
三. NIO2 通道工作原理
- bio,nio都是由使用者態發起資料拷貝(read操作),而nio2(aio)則是由作業系統發起資料拷貝,所有的io操作都是由作業系統主動完成。所以io操作和使用者業務邏輯的執行都是非同步化的。
- NIO2通道相比NIO效率高,因為proactor模式本來就比reactor模式要好,另外還省去了Poller執行緒,但由於多路事件分離器是核心提供的,不同核心提供的多路事件分離器的事件處理效率不一,對NIO2的通道需要基於實際環境和場景壓測才能得出最終的結論
四. APR 通道工作原理
APR通道只有很小的一部分是java,大部分的原始碼都是C的,而且和作業系統的環境有著密切的關係,不同作業系統定製的介面不同,效能特色也不同。