java架構之路-(八)簡單聊聊tomcat(二)

  • 2019 年 10 月 5 日
  • 筆記

  上節課我們說到的Tomcat,並且給予了一般的tomcat配置,和配置的作用,提到了HTTP/1.1

也就是我們的網路通訊模型,那麼HTTP/1.1又代表什麼呢。我們來簡答看一下。

tomcat有四種網路通訊模型分別為BIO,NIO,AIO還有APR(Tomcat將以JNI的形式調用Apache HTTP伺服器的核心動態鏈接庫來處理文件讀取或網路傳輸操作。使用需要編譯安裝APR 庫,這裡不做過多解釋,一般不用,有興趣的小夥伴看自行去研究)。

那麼什麼又是IO呢?

  IO是指為數據傳輸所提供的輸入輸出流,其輸入輸出對象可以是:文件、網路服務、記憶體等。

這裡說一下,在tomcat7中,默認的HTTP/1.1是我們的BIO模型,tomcat8默認的是我們的NIO模型,但是也支援BIO,

什麼是BIO呢?BIO又長什麼樣子呢?我這裡簡單的畫一個圖來看看。

  BIO是一個同步阻塞式IO,在tomcat7中默認HTTP/1.1就是我們的BIO模型,同時tomcat7支援NIO,但不支援AIO。

BIO理論上一個是一個請求過來會分配一個執行緒來處理這個請求,對於性能開銷是很大的。就是我們執行緒需要等候你的數據處理完再返回給客戶端。

BIO的配置protocol="org.apache.coyote.http11.Http11Protocol"

NIO是一個同步非阻塞式IO,在tomcat8中默認的就是NIO模型 ,也支援AIO.

NIO需要少量的請求就可以處理大量的請求,請求發送到服務端時,我們NIO會分配一個執行緒去處理該請求,但是不會等待你的處理,你處理完成以後了,多路復用選擇器會來輪詢是你否處理完成,處理完成再返回給客戶端,大大的減少了執行緒數目和執行緒的使用率。

NIO的配置protocol="org.apache.coyote.http11.Http11NioProtocol"

AIO是一個非同步非阻塞式IO,和NIO基本類似,但是AIO是沒有多路復用選擇器的,AIO是通過一個非同步的事件來通知請求處理已經完成的。AIO的Poller執行緒是兩個,但是具體是不是一個接受,一個發送的不清楚,暫時那樣畫啦。

AIO的配置protocol="org.apache.coyote.http11.Http11Nio2Protocol"。

BIO 執行緒數量會受到客戶端阻塞、網路延遲、業務處理慢===>執行緒數會更多 NIO 執行緒數量會受到業務處理慢===>執行緒數會更多

也就是說程式碼寫的好點,不然XO也白扯的。

給大家一個參數表,可以更好的去配置tomcat

Tomcat也是採用了類似雙親委派的載入機制來載入,只能說一部分是雙親委派吧。頂層和jvm是一致的,但是我們的tomcat同時部署兩個項目,一個是spring4的項目,另外一個是spring5的項目,這時他就是一個倒置的過程。如圖所示

tomcat大致也就說這麼多,明天我們來說說jvm的優化,也說說今天只是提了一下雙親委派機制。