您好,登錄后才能下訂單哦!
小編給大家分享一下Tomcat NIO中整體架構是怎么樣的,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Acceptor線程
tomcat NIO 架構中會有一個 acceptor 線程,這個線程主要監聽端口。當有請求過來的時候,完成 tcp 三次握手,將 accept 過來的 socket 注冊OP_REGISTER 事件,并將該事件提交到 Poller 線程的事件隊列 PollerEventQueue中 。
在 tomcat NIO 架構中會有 poller 線程,在 tomcat8 及以前的版本之中,可以通過 pollerThreadCount 配置 poller thread 的數目,但是在 tomcat 9.0.21 中 poller thread 數目始終會為 1。
poller thread 的核心功能主要由以前文章中介紹的 Poller 類來實現,對于每一個 poller 實例都有一個 NIO selector 實例,同時也有一個事件隊列SynchronizedQueue<PollerEvent>。
對于每一個 poller thread 來說,都會去輪詢隊列 SynchronizedQueue<PollerEvent>,該隊列的事件由 acceptor 線程(監聽到新連接時)或者 tomcat io 線程(處理完請求之后保持長連接,添加讀事件)放入,然后根據不同的事件對原始socket注冊相應的讀寫事件。
BlockPoller線程
tomcat NIO 架構中會有 block poller 線程,其核心功能由以前文章中介紹的 BlockPoller 類來實現,BlockPoller 實例會有一個 NIO selector 實例,同時也會擁有一個自己的事件隊列實例SynchronizedQueue<Runnable>。
對于BlockPoller thread來說, 會去輪詢隊列 SynchronizedQueue<Runnable>,該隊列的對象(RunnableAdd類型)由 tomcat io 線程放入,然后根據不同的對象對原始 socket 注冊相應的讀寫事件。
看完了這篇文章,相信你對“Tomcat NIO中整體架構是怎么樣的”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。