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.1” 8.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 |
每個請求的緩衝區大小。 |
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 模式下 最小線閒置線程數 |