日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot應用啟動內置Tomcat的過程源碼分析

瀏覽:153日期:2023-02-25 09:23:38
Connector啟動過程

Connector是Tomcat提供的類。

// 通過此 Connector 開始處理請求@Overrideprotected void startInternal() throws LifecycleException { // Validate settings before starting if (getPortWithOffset() < 0) {throw new LifecycleException(sm.getString('coyoteConnector.invalidPort', Integer.valueOf(getPortWithOffset()))); } setState(LifecycleState.STARTING); try { // 核心動作protocolHandler.start(); } catch (Exception e) {throw new LifecycleException(sm.getString('coyoteConnector.protocolHandlerStartFailed'), e); }}

springboot默認會在8080端口提供 HTTP 服務,所以這里是一個處理HTTP協議請求的 Http11NioProtocol 實例,使用 NIO 方式處理 HTTP 協議。Connector 對HTTP請求的接收和處理并非親自完成,而是委托該 Http11NioProtocol protocolHandler 完成

SpringBoot應用啟動內置Tomcat的過程源碼分析

而 protocolHandler 又進一步將請求處理工作交給 NioEndpoint 完成。

AbstractProtocol

@Overridepublic void start() throws Exception { if (getLog().isInfoEnabled()) {getLog().info(sm.getString('abstractProtocolHandler.start', getName()));logPortOffset(); } endpoint.start(); monitorFuture = getUtilityExecutor().scheduleWithFixedDelay( new Runnable() {@Overridepublic void run() { if (!isPaused()) {startAsyncTimeout(); }} }, 0, 60, TimeUnit.SECONDS);}

調用鏈 :

Connector.start() startInternal() Http11NioProtocol protocolHandler.start(); Http11NioProtocol 的 start方法,由基類 AbstractProtocol 提供實現。它們都是tomcat提供的類。 NioEndpoint endpoint.start()

start成員變量endpoint,一個 NioEndpoint 實例。Http11NioProtocol 類實例也并非最終處理請求,具體這些請求的處理都委托給了 NioEndpint endpoint 來完成

SpringBoot應用啟動內置Tomcat的過程源碼分析

AbstractEndpoint

public final void start() throws Exception { if (bindState == BindState.UNBOUND) {bindWithCleanup();bindState = BindState.BOUND_ON_START; } startInternal();}

可見 tomcat 的三種模式,默認使用 NIO 模式。SpringBoot應用啟動內置Tomcat的過程源碼分析

@Overridepublic void bind() throws Exception { initServerSocket(); setStopLatch(new CountDownLatch(1)); // Initialize SSL if needed initialiseSsl(); selectorPool.open(getName());}

protected void initServerSocket() throws Exception { if (!getUseInheritedChannel()) { // 建立服務套接字serverSock = ServerSocketChannel.open();socketProperties.setProperties(serverSock.socket());InetSocketAddress addr = new InetSocketAddress(getAddress(), getPortWithOffset());// 綁定到指定端口serverSock.socket().bind(addr,getAcceptCount()); } else {// Retrieve the channel provided by the OSChannel ic = System.inheritedChannel();if (ic instanceof ServerSocketChannel) { serverSock = (ServerSocketChannel) ic;}if (serverSock == null) { throw new IllegalArgumentException(sm.getString('endpoint.init.bind.inherited'));} } // 設置 serverSock 為阻塞模式 serverSock.configureBlocking(true); //mimic APR behavior}

serverSocket配置的是阻塞模式,明明默認使用NIO 模式,為何還要設置阻塞模式呢?為什么使用NIO,因為BIO的accept是阻塞方法,write和read也都是阻塞的。只能當新連接到來時,去創建新線程去處理這個連接。如此,最大問題是不能同時處理大量連接,因為大量連接帶來的是創建很多線程,大量線程很容易讓操作系統崩潰,而且雖然并發度很高,但是很多線程都在空轉,很多時間都浪費在線程空跑和線程切換上,效率也很差。于是誕生了NIO。

其實處理連接的操作不必放在后臺線程,因為后臺線程很可能會處理連接建立不及時,不如將其置于主線程,增加并發度(雖然優勢并不是特別明顯)。重點關心的是連接建立后獲得的與客戶端交互的那個socket,它的操作必須是非阻塞的,這很顯然。因為在處理長連接時,我們關心的是在本次連接之內數據的讀寫。

NioEndpoint 正在使用阻塞模式的 ServerSocketChannel 以使其阻塞并等待連接傳入,并且只有在accept后,才以非阻塞方式處理此傳入的socket channel (見setSocketOptions 方法)。

正如作者指出的那樣,使 ServerSocketChannel 成為非阻塞的將導致忙讀取,即一個線程將不斷輪詢有無傳入的連接,因為在非阻塞模式下 accept() 可能返回 null。

APR 代表 Apache Portable Runtime

Tomcat在接收到socket的時候做了如下操作:

SpringBoot應用啟動內置Tomcat的過程源碼分析SpringBoot應用啟動內置Tomcat的過程源碼分析SpringBoot應用啟動內置Tomcat的過程源碼分析

參考

https://blog.csdn.net/andy_zhang2007/article/details/78641974https://stackoverflow.com/questions/23168910/why-tomcats-non-blocking-connector-is-using-a-blocking-socket

到此這篇關于SpringBoot應用啟動內置Tomcat的過程分析的文章就介紹到這了,更多相關SpringBoot 內置Tomcat啟動內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品欧美一区二区三区在线观看| 麻豆一区二区在线| 日韩精品免费视频一区二区三区| 蜜桃视频一区二区三区在线观看 | 国产精品男女| 欧美午夜三级| 日韩精品福利一区二区三区| 视频一区视频二区在线观看| 爽好多水快深点欧美视频| 首页亚洲欧美制服丝腿| 亚洲精品电影| 99热精品在线观看| 免费国产亚洲视频| 在线视频精品| 国产精品毛片在线| 亚欧成人精品| 91精品美女| 美女视频网站久久| 欧美男人天堂| 精品欧美久久| 久久精品 人人爱| 欧美香蕉视频| 免费成人性网站| 免费在线日韩av| 99成人在线视频| 国产一区亚洲| 日韩精品成人在线观看| 麻豆视频在线观看免费网站黄| 亚洲午夜视频| 精品91久久久久| 国产精品一区亚洲| 日韩高清中文字幕一区二区| 亚洲专区在线| 久久精品亚洲| 欧美综合国产| 国产日韩欧美| 99在线观看免费视频精品观看| 欧美日韩a区| 国产综合视频| 久久久国产精品网站| 亚州av乱码久久精品蜜桃| 日韩精品一区二区三区中文| 9999国产精品| 色8久久久久| 国产精品亚洲综合久久| 亚洲福利久久| 麻豆免费精品视频| 免费人成在线不卡| 亚洲一区资源| 日韩专区视频网站| 九一精品国产| 日韩av二区| 午夜性色一区二区三区免费视频| 久久亚洲黄色| 婷婷成人av| 久久免费国产| 欧美91在线| 亚洲人成精品久久久| a国产在线视频| 99视频精品视频高清免费| 视频一区日韩精品| 日韩在线高清| 欧美亚洲一级| 久久亚洲影院| 桃色一区二区| 国产精品久久久久久妇女| av成人国产| 欧洲精品一区二区三区| 亚洲18在线| 国产中文一区| 免费亚洲婷婷| 日本免费一区二区视频| 免费黄网站欧美| 一区免费在线| 久久伊人亚洲| 国产丝袜一区| 日本一区二区三区视频在线看 | 麻豆成人在线| 久久理论电影| 日韩精品第一区| 色婷婷色综合| 激情综合五月| 牛牛精品成人免费视频| 国产乱码精品一区二区三区四区| 一级成人国产| 亚洲一区成人| 亚洲国产福利| 91日韩在线| 成人在线丰满少妇av| 久久精品国产成人一区二区三区| 日韩av不卡一区二区| 日本成人在线一区| 久久国内精品自在自线400部| 亚洲制服一区| 日本欧美韩国一区三区| 日韩av网站免费在线| 日本麻豆一区二区三区视频| 午夜电影一区| 91成人精品观看| 国产日韩欧美一区二区三区 | 国产精品久久久网站| 欧美亚洲国产日韩| 国产精品亚洲四区在线观看| 日本成人在线不卡视频| 91嫩草精品| 国产精品a级| 久久99高清| 成人日韩精品| 免费精品国产| 92国产精品| 日韩午夜在线| 视频一区日韩精品| 国产亚洲久久| 国产福利91精品一区二区| 色偷偷偷在线视频播放| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国内精品福利| 99在线精品免费视频九九视| 亚洲精品少妇| 国产高清精品二区| 中文字幕系列一区| 在线亚洲自拍| 欧美影院精品| 国产精品国产一区| 久久久精品日韩| 中文欧美日韩| 欧美日韩18| 欧美日韩视频免费观看| 99国产精品| 国产日韩亚洲欧美精品| 在线精品亚洲欧美日韩国产| 视频一区二区三区中文字幕| 国产一区二区高清| 911精品国产| 久久青草久久| 蜜桃视频在线观看一区二区| 麻豆国产欧美一区二区三区| 亚洲v在线看| 婷婷五月色综合香五月| 88久久精品| 亚洲黑丝一区二区| 欧美日韩18| 成人精品中文字幕| 日本成人精品| 日韩欧美三级| 亚洲精品少妇| 欧产日产国产精品视频| 999久久久91| 久久激情五月激情| 久久中文视频| 国产精品一国产精品| 国产精品88久久久久久| 欧美偷窥清纯综合图区| 亚洲天堂免费电影| 国产亚洲久久| 免费久久精品| 国产一区二区精品久| 视频精品一区| 欧美+日本+国产+在线a∨观看| 日本一区中文字幕| 精品日韩视频| 国产精品黄网站| 神马午夜在线视频| 国产亚洲精品精品国产亚洲综合 | 国产毛片一区二区三区| 午夜日韩福利| 国产a久久精品一区二区三区| 在线精品一区二区| 色老板在线视频一区二区| 日韩av一区二区三区四区| 欧美日韩国产一区二区三区不卡| 久久精品免费看| 色综合视频一区二区三区日韩 | 在线观看精品| 国产精品17p| 日韩1区2区3区| 久久久久一区| 免费在线成人| 午夜久久av| 亚洲主播在线| 中文字幕系列一区| 国产精品久久久久77777丨| 欧美.日韩.国产.一区.二区| 久久一区欧美| 亚洲精品欧美| 日韩在线精品| 精品一区91| 91精品国产一区二区在线观看| 国产一区视频在线观看免费| 精品国产亚洲日本| 国产精品日韩精品在线播放| 亚洲精品动态| 蜜桃视频免费观看一区| 精品欧美激情在线观看| 日韩精品网站| 秋霞影视一区二区三区| 国产一区二区三区不卡av| 精品亚洲二区| 日韩av在线中文字幕| 动漫av一区|