Tomcat線程模型

目錄

1 Linux I/O模型

2 Linux I/O模型分類

3 Tomcat支持的I/O模型

4 Tomcat I/O模型選型

5 Tomcat NIO實現

6 Tomcat異步IO實現


1 Linux I/O模型
  • I/O:在計算機內存和外部設備之間拷貝數據的過程
  • 程序通過cpu向外部設備發出讀指令,數據從外部設置拷貝至內存需要一段時間,這段時間cpu是空閑的,此時程序會有兩種選擇:
    • 讓出cpu資源,讓其干其他事
    • 繼續讓cpu不停地查詢數據是否拷貝完成
  • 采用哪種策略就是I/O模型需要解決的事

  • 一個進程的地址空間分為用戶空間和內核空間
  • 用戶程序只能訪問用戶空間,內核進程可以訪問整個進程空間
  • 只有內核才可以直接訪問各種硬件資源,比如磁盤和網卡
  • 當cpu從網絡讀取數據時,分為兩個階段
    • 數據準備階段:將數據從網卡拷貝到內核空間
    • 數據拷貝階段:將數據從內核空間拷貝到用戶空間
  • 不同的I/O模型對以上兩個步驟有不同的實現

2 Linux I/O模型分類
  • 同步阻塞I/O
  • 同步非阻塞I/O
  • I/O多路復用
  • 信號驅動式I/O
  • 異步I/O

  • 阻塞或非阻塞是指應用程序在發起I/O操作時,是立即返回還是等待
  • 同步異步應用程序內核通信數據內核空間應用空間拷貝內核主動發起還是應用程序

java支持I/O模型同步阻塞I/OI/O多路復用異步I/O

3 Tomcat支持的I/O模型

tomcat支持I/O模型

IO模型

描述

BIO(BioEndpoint)

同步阻塞IO

模式下每個請求都會占用一個線程性能開銷大不適合高并發場景

但是穩定適合連接數目并且固定架構

NIO(NioEndpoint)

IO多路復用

tomcat8之后默認采用IO模型

NIO方式適合連接數并且連接比較架構

AIO(Nio2Endpoint)

異步非阻塞IO

啟動執行處理連接方法此時直接返回

發生連接事件執行回調方法完成連接

然后執行處理事件方法也是直接返回

當發生事件執行對應回調方法

適用于連接較多連接事件較長應用

APR(AprEndpoint)

Apache Portable RuntimeApache HTTP服務支持

AprEndpoint通過JNI調用APR本地而實現非阻塞IO

使用需要編譯安裝APR

Linux內核沒有完善支持異步IO模型

因此JVM并沒有采用原生Linux異步IO而是應用通過epoll模擬了異步IO模型

所以Linux平臺Java NIOJava NIO2底層都是通過epoll來實現

4 Tomcat I/O模型選型
  • IO調優實際上連接器類型選擇
  • 一般情況默認都是NIO
  • web應用啟用TLS加密傳輸并且要求極高考慮使用APR
  • APR通過openssl來處理TLS握手openssl本身采用c語言開發并且TLS通信做了優化所以性能java要高
  • 如果tomcat運行windows平臺并且http請求數據量較大考慮采用NIO2
  • windows操作系統平面實現真正意義異步IO如果傳輸數據量較大異步IO效果就能顯現出來
  • tomcat運行linux平臺建議使用NIOlinux平臺nionio2都是通過epoll來實現但是nio簡單高效
  • 指定IO模型修改Connector標簽protocol屬性
5 Tomcat NIO實現
  • tomcatEndpoint組件主要工作就是處理I/O
  • NioEndpoint利用java NIO API實現多路復用I/O模型
  • NioEndpoint基于主從Reactor多線程模型設計的
  • LimitLatch連接控制器負責控制最大連接數默認8192連接達到最大阻塞線程,直到后續組件處理一個連接連接數1
  • 到達最大連接數操作系統底層還是會接受客戶端連接但是用戶已經不在接收
  • Acceptor跑在一個單獨線程死循環調用acceptor方法新連接一旦新的連接請求到來accept方法返回一個Channel對象Channel帝鄉交給Poller去處理
  • Poller也跑單獨線程Poller內部維護一個SelectorAcceptor傳遞過來Channel注冊Selector讀事件一旦發生事件生成一個SockeProcessor任務對象扔給Executor處理
  • Executor就是線程池負責運行SockeProcessor任務SockeProcessorrun方法調用Http11Processor來讀取解析請求數據Http11Processor應用協議封裝負責調用容器獲得響應并將響應通過Channel寫出
6 Tomcat異步IO實現

  • NIONIO2最大區別NIO2異步
  • 異步不需要應用程序自己觸發數據內核空間用戶空間拷貝
  • NioEndPoint沒有Poller組件也就是沒有Selector
  • 異步I/O模式下Selector工作交給內核來做了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83511.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最新Spring Security實戰教程企業級安全方案設計實現

最新Spring Security實戰教程(十七)企業級安全方案設計 - 多因素認證(MFA)實現 1. 前言2. 為什么需要多因素認證? 傳統認證的風險MFA的核心優勢常見多因素認證實現方案 3. 多因素認證的核心原理4. 系統架構與流程設計…

十九、【用戶管理與權限 - 篇一】后端基礎:用戶列表與角色模型的初步構建

【用戶管理與權限 - 篇一】后端基礎:用戶列表與角色模型的初步構建 前言準備工作第一部分:回顧 Django 內置的 `User` 模型第二部分:設計并創建 `Role` 和 `UserProfile` 模型第三部分:創建 Serializers第四部分:創建 ViewSets第五部分:注冊 API 路由第六部分:后端初步測…

大話軟工筆記—架構的概要設計

架構的概要設計是在需求工程分析成果的基礎之上對整個系統進行的頂層規劃,重點是確定設計規范(理念、主線等),從大的范圍和高度對業務進行規劃和設計,架構概要設計的成果“業務架構圖”,是后續各階段設計的…

Flink CDC —部署模式

一、Standalone 模式 獨立模式是Flink最簡單的部署模式。本簡短指南將向您展示如何下載最新穩定版本的Flink,安裝和運行它。 您還將運行一個示例Flink CDC作業,并在web UI中查看它。 1、準備 Flink在所有類似UNIX的環境中運行,即Linux、Mac…

day029-Shell自動化編程-計算與while循環

文章目錄 1. read 交互式初始化變量1.1 案例-安裝不同的軟件1.2 案例-比較大小 2. 計算2.1 bc2.2 awk2.3 expr2.4 let2.5 案例-計算內存的空閑率2.6 案例-檢查域名過期時間和https證書過期時間 3. 循環3.1 循環控制語句3.2 for循環-c語言格式3.3 while循環3.3.1 案例-猜數字3.3…

華為云Flexus+DeepSeek征文 | 基于華為云ModelArts Studio打造AingDesk AI聊天助手

華為云FlexusDeepSeek征文 | 基于華為云ModelArts Studio打造AingDesk AI聊天助手 引言一、ModelArts Studio平臺介紹華為云ModelArts Studio簡介ModelArts Studio主要特點 二、安裝AingDesk應用AingDesk應用介紹下載地址安裝AingDesk工具 三、開通DeepSeek-R1-0528商用服務訪問…

深度解析Git錯誤:`fatal: detected dubious ownership in repository` 的根源與解決方案

如果你是在使用自己的移動硬盤(U盤)操作項目時遇到的這個問題直接執行git config --global --add safe.directory X:/path即可,只要你的移動硬盤(U盤)沒有病毒就不會有安全問題。 深度解析Git錯誤:fatal: d…

基于Spring Boot的校園社區平臺設計與實現

目錄 一.🦁前言二.🦁開源代碼與組件使用情況說明三.🦁核心功能1. ?算法設計2. ?Thymeleaf模板引擎3. ?MyBatis Plus框架4. ?部署項目 四.🦁演示效果1. 管理員模塊1.1 用戶管理1.2 瀏覽管理員首頁1.3 論壇管理1.4 校園咨詢管理…

Java 8 Map 新增方法詳解

Java 8 Map 新增方法詳解 1. getOrDefault 源碼: default V getOrDefault(Object key, V defaultValue) {V v;return (((v get(key)) ! null) || containsKey(key))? v: defaultValue;}作用:安全獲取值,若key不存在則返回默認值 示例&…

山東大學 2025 web數據管理期末復習總結

SDU-2025年-Web數據管理期末總結 考試題型 填空 :都來自于PPT中名詞解釋簡答題:需要背一些公式。 根據L老師上課提及的重點一共總結了87問題。 文章目錄 SDU-2025年-Web數據管理期末總結考試題型第1講 緒論此章不考 第2講 網絡爬蟲技術2.1 爬蟲是什么…

Spring框架的設計模式

Spring 框架深度集成了多種經典設計模式,這些模式支撐了其核心功能(如IoC、AOP)的實現,以下是關鍵模式及其應用場景的梳理: 1、工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設計模式…

git報錯fatal: 遠端意外掛斷了

git報錯fatal: 遠端意外掛斷了 報錯詳細內容 mr.mbogon tinymce % git add . mr.mbogon tinymce % git commit -m init [master c6cfc2a] init1 file changed, 2 insertions(), 1 deletion(-) mr.mengbogon tinymce % git push 枚舉對象中: 241, 完成…

Windows 下安裝 NVM

NVM 下載 NVM 在工作中,你可能遇到過某個項目需要高版本的 node 才能運行,而有的項目可能只支持低版本的 node,此時就可以借助于一些 Node 版本管理工具,比如 nvm(Node Version Manager),幫助…

AI知識補全(十七):通用人工智能AGI是什么?

名人說:博觀而約取,厚積而薄發。——蘇軾《稼說送張琥》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 上一篇:AI知識補全(十六):A2A - 谷歌開源的agent通信協議是什么? 目錄 一、什么是AGI?概念解析1. 什么是AGI2. AGI與現有AI的本質區別二 、AGI的核…

Spring Cloud Gateway 介紹

什么是Spring Cloud Gateway? Spring Cloud Gateway 是 Spring Cloud 社區官方推出的一個基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.x 的下一代 API 網關(API Gateway)解決方案。它旨在為微服務架構提供統一、簡潔、高效的…

slam--高斯分布

教程 博主解釋 高斯分布 高斯分布(Gaussian Distribution),又稱正態分布(Normal Distribution),是描述連續型隨機變量分布規律的一種概率分布。 (1) 一維高斯分布 μ:均值/數學期望&#xff0…

機器視覺標定講解

B站 :道傳科技上位機 觀看教程 一、什么是相機標定 相機標定(Camera Calibration)是指通過實驗或算法手段確定相機的內部參數(如焦距、主點坐標、畸變系數)和外部參數(如旋轉矩陣、平移向量&#xff0…

文件的秒傳、分片上傳以及斷點續傳 || Redis緩存減輕數據庫讀寫壓力

實現文件的秒傳、分片上傳以及斷點續傳的功能。使用 Redis 緩存上傳的文件分片信息減輕數據庫讀寫壓力,同時防止有人惡意攻擊服務器導致服務器磁盤爆滿無法提供服務。 🔍 詳解: 1. 實現文件的秒傳、分片上傳以及斷點續傳功能 秒傳&#xff0…

安全大模型智驅網絡和數據安全效能躍遷

從2023年ChatGPT開始,網絡安全行業就一直嘗試和AI大模型來結合,解決網絡安全的痛點,例如告警多,專家少,新的APT攻擊層出不窮,已有的基于規則的防護手段失靈,如何使用大模型的泛化能力來提升對未…

Android S - 恢復部分應用安裝

使用展銳提供的代碼編譯出來的固件&#xff0c;不包含DeskClock等應用。 之前也遇到過這個情況&#xff0c;只是時間太久忘記了&#xff0c;在這里再次記錄&#xff01; frameworks/native/data/etc/android.app.remove.xml<?xml version"1.0" encoding"ut…