Tomcat BIO、NIO線程模型簡析

Tomcat  BIO、NIO線程模型

Tomcat 支持四種線程模型介紹

各IO 簡單說明

 

描述

BIO

阻塞式IO,即Tomcat使用傳統的java.io進行操作。該模式下每個請求都會創建一個線程,對性能開銷大,不適合高併發場景。優點是穩定,適合連接數目小且固定架構。

NIO

非阻塞式IO,jdk1.4 之後實現的新IO。該模式基於多路複用選擇器監測連接狀態在通知線程處理,從而達到非阻塞的目的。比傳統BIO能更好的支持併發性能。Tomcat 8.0之後默認採用該模式

APR

全稱是 Apache Portable Runtime/Apache可移植運行庫),是Apache HTTP服務器的支持庫。可以簡單地理解爲,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作。使用需要編譯安裝APR 庫

AIO

異步非阻塞式IO,jdk1.7後之支持 。與nio不同在於不需要多路複用選擇器,而是請求處理線程執行完程進行回調調知,已繼續執行後續操作。Tomcat 8之後支持。

 

使用指定IO模型的配置方式:

配置 server.xml 文件當中的 <Connector protocol="HTTP/1.1"> 修改即可。

默認配置 8.0 protocol=“HTTP/1.18.0 之前是 BIO 8.0 之後是NIO

BIO

protocol=“org.apache.coyote.http11.Http11Protocol

NIO

protocol=”org.apache.coyote.http11.Http11NioProtocol“

AIO

protocol=”org.apache.coyote.http11.Http11Nio2Protocol“

APR

protocol=”org.apache.coyote.http11.Http11AprProtocol“

Tomcat BIO、NIO實現過程源碼解析

BIO 線程模型講解(5分鐘)

 

 

BIO 源碼

線程組:

Accept 線程組 acceptorThreadCount  默認1個

exec 線程組 maxThread

JIoEndpoint

Acceptor extends Runnable

SocketProcessor extends Runnable

 

NIO 線程模型

Accept 線程組 默認兩個輪詢器

Poller Selector PollerEvent輪詢線程狀態

SocketProcessor

 

Tomcat connector 併發參數解讀

acceptCount

等待最大隊列 默認100

address

綁定客戶端特定地址,127.0.0.1

bufferSize

每個請求的緩衝區大小。
bufferSize * maxThreads

compression

是否啓用文檔壓縮

compressableMimeTypes

text/html,text/xml,text/plain

connectionTimeout

客戶發起鏈接 到 服務端接收爲止,中間最大的等待時間

connectionUploadTimeout

upload 情況下連接超時時間

disableUploadTimeout

true 則使用connectionTimeout

enableLookups

禁用DNS查詢 true

keepAliveTimeout

當長鏈接閒置 指定時間主動關閉 鏈接 ,前提是客戶端請求頭 帶上這個 head"connection" " keep-alive"

maxKeepAliveRequests

最大的 長連接數  默認最大100

maxHttpHeaderSize

 

maxSpareThreads

BIO 模式下 最多線閒置線程數

maxThreads

最大執行線程數

minSpareThreads

BIO 模式下 最小線閒置線程數

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章