IO模型學習(一)IO模型分類
IO分類
在java中,IO分為Bio、Nio、Aio三類,三者有本質的區別,下面主要講解其在網路IO中的區別。
Bio
阻塞式IO,客戶端類為Socket,服務端類為ServerSocket。該類中提供的方法全部為阻塞方法,即該操作完成後,該方法才會返回。舉例說明,如果呼叫了Socket輸入流的readLine方法,那麼該方法必須在讀取到換行符才會返回。優點:實現簡單缺點:針對每一個客戶端請求都需要建立一個IO執行緒進行處理,並且IO操作在等待條件未滿足時,仍然佔用已持有資源等待,受網路波動的影響較大。
Nio
非阻塞式IO,客戶端類為SocketChannel,服務端類為ServerSocketChannel。在Nio中提供了阻塞和非阻塞兩種模式,一般我們會使用Nio的非阻塞模式,即每一個方法不會等待條件滿足就會立即返回。舉例說明:如果呼叫SocketChannel的read方法時,不管讀沒讀到資料都會立即返回,那麼帶來的問題也可想而知,對於IO操作的判斷邏輯會變得更加複雜(因為執行IO操作時,並不知道該操作有沒有完成)。優點:Nio中使用一個IO執行緒(Selector輪詢檢查每一個註冊的Channel)去處理所有的客戶端連線,且IO操作會立即返回,不會產生BIO中保持資源等待的情況。缺點:由於IO操作的完成情況是不確定的,導致了處理邏輯會比Nio複雜,其次IO執行緒通過輪詢的方式檢測,當註冊在Selector上的Channel非常多時,會成為系統的瓶頸
Aio
非同步IO,客戶端類為AsynchronousSocketChannel,服務端類為AsynchronousServerSocketChannel。相比於只使用一個IO執行緒處理IO操作的Nio而言,Aio中不存在額外的IO執行緒,而是通過事件回撥的方式來執行。(對Aio瞭解還不是很深刻,此處不做過多的講解)優點:不需要IO執行緒,相比於輪詢Channel的Nio而言,採用事件響應模式可以有更小的開銷缺點:目前還不知道
Tomcat配置IO協議
使用指定IO模型的配置方式:
配置 server.xml 檔案當中的
<Connector protocol="HTTP/1.1">
protocol 修改即可。
預設配置 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“
下面是摘的server.xml中的一段配置
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation. The default
SSLImplementation will depend on the presence of the APR/native
library and the useOpenSSL attribute of the
AprLifecycleListener.
Either JSSE or OpenSSL style configuration may be used regardless of
the SSLImplementation selected. JSSE style configuration is used below.
-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
This connector uses the APR/native implementation which always uses
OpenSSL for TLS.
Either JSSE or OpenSSL style configuration may be used. OpenSSL style
configuration is used below.
-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
Connector 可以配置HTTP協議的和AJP協議. 可以參考/docs/config/http.html 裡面的內容 .
可以配置執行緒池, 連結超時時間, 監聽的埠號,SSH連結配置. 重定向的埠.
相關文章
- IO模型模型
- io模型 WSAAsyncSelect模型
- 【IO】Linux下的五種IO模型Linux模型
- linux的IO模型Linux模型
- IO通訊模型(三)多路複用IO模型
- 【NIO系列】——之IO模型模型
- (四)五種IO模型模型
- WinSock 重疊IO模型模型
- 五種傳統IO模型模型
- 圖解四種 IO 模型圖解模型
- NIO(二)淺析IO模型模型
- 五種網路io模型模型
- 今天我們來聊Java IO模型,BIO、NIO、AIO三種常見IO模型Java模型AI
- IO通訊模型(二)同步非阻塞模式NIO(NonBlocking IO)模型模式BloC
- Linux中的IO模型介紹Linux模型
- 【OS】5種網路IO模型模型
- 高效能IO模型淺析模型
- Java3種IO模型,一次搞懂!Java模型
- 【網路IO系列】IO的五種模型,BIO、NIO、AIO、IO多路複用、 訊號驅動IO模型AI
- 網路IO模型-非同步選擇模型(Delphi版)模型非同步
- 大壓力 小資料IO模型模型
- 網路程式設計之IO模型程式設計模型
- (三)Redis 執行緒與IO模型Redis執行緒模型
- IO模型與吃飯的那些事模型
- 高階IO模型之kqueue和epoll模型
- 從io模型到ppc,tpc,reactor,preactor模型React
- 網路 IO 模型簡單介紹模型
- JAVA進階之IO模型深入解析Java模型
- 通過IO模型帶來的思考模型
- Redis基礎知識(學習筆記6--執行緒IO模型)Redis筆記執行緒模型
- 從時間碎片角度理解阻塞IO模型及非阻塞模型模型
- IO流中「執行緒」模型總結執行緒模型
- 併發程式設計——IO模型詳解程式設計模型
- activemq修改IO模型和最大連線數MQ模型
- Linux網路程式設計之IO模型Linux程式設計模型
- 五種IO模型介紹和對比模型
- Day55.IO流複習 -Java常用類、集合、IO#Java
- 一頓飯的事兒,搞懂Linux5種IO模型Linux模型