『互聯網架構』軟件架構-tomcat之線程源碼熟悉通信方式(上)

今天說說tomcat線程源碼模型,想通過tomcat的線程源碼的模型,老鐵們可以熟悉關於連接的,高併發的一些配置。之前就是配置好了,就永久受益了,一起說說tomcat的線程模型還是收益比較大的。

『互聯網架構』軟件架構-tomcat之線程源碼熟悉通信方式(上)

Tomcat支持的四種線程模型的介紹

截止到8.0 tomcat支持的四種現場模型,

『互聯網架構』軟件架構-tomcat之線程源碼熟悉通信方式(上)

  • BIO

tomcat6.0之前都是用的BIO,8.0是默認的BIO,傳統的java IO來進行的其實就是socket。

  • NIO

通過selector,通過請求過來分配給指定的線程,只是做讀取。讀取完成後立馬就釋放。通知客戶端。讀取和寫入是分離的。檢測是可讀,可寫。每個請求創建一個線程、tomcat並不是自己來做線程控制的。而是通過線程池的方式。目前使用高併發的模式,默認都是使用NIO。

  • APR

tomcat可以通過JNI的方式安裝APR這個庫。linux安裝linux版本的apache的庫,windows安裝windows版本的的apache的庫。很多人都認爲apache處理靜態文件比tomcat要快。可能是之前了。現在速度基本都一樣的。

  • AIO

tomcat7之後產生的,因爲NIO有select 其實就是多路複用選擇器,AIO就沒有

使用指定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,非阻塞NIO。他們是如何實現的。他們的原理是什麼?

同步 : 自己親自出馬持銀行卡到銀行取錢(使用同步IO時,Java自己處理IO讀寫);

異步 : 委託一小弟拿銀行卡到銀行取錢,然後給你(使用異步IO時,Java將IO讀寫委託給OS處理,需要將數據緩衝區地址和大小傳給OS(銀行卡和密碼),OS需要支持異步IO操作API);

阻塞 : ATM排隊取款,你只能等待(使用阻塞IO時,Java調用會一直阻塞到讀寫完成才返回);

非阻塞 : 櫃檯取款,取個號,然後坐在椅子上做其它事,等號廣播會通知你辦理,沒到號你就不能去,你可以不斷問大堂經理排到了沒有,大堂經理如果說還沒到你就不能去(使用非阻塞IO時,如果不能讀寫Java調用會馬上返回,當IO事件分發器會通知可讀寫時再繼續進行讀寫,不斷循環直到讀寫完成)

Tomcat connector 併發參數解讀

connector平常使用最多的,最大連接數,最大超時時間,連接包,

『互聯網架構』軟件架構-tomcat之線程源碼熟悉通信方式(上)

PS:NIO就是用最少的線程幹最多的事情,BIO是找更多的人來幹。都是要進行堵塞的,尤其是selector.select()方法上,跟bio的accept()一樣,其實都在阻塞。比較單線程和多線程的處理方式,一般情況下無論哪種,nio模式都要比bio更優。

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