聊聊接口最大并发处理数
文章目录
- 前言
- 并发和并行
- 并发(Concurrency)
- 并行(Parallelism)
- 思考一下
前言
生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设计三高指标,那就是高并发、高性能、高可用。本文主要讲高并发、高性能相关。本质上高性能也是为了给高并发铺平道路。而高并发设计中一部分也就是对应了本文主题接口最大并发数。
并发和并行
再开始讲并发之前,我需要再给大家回顾一些旧知识。
什么是并发?什么是并行…
并发(Concurrency)
早期计算机的 CPU 都是单核的,一个 CPU 在同一时间只能执行一个进程/线程,当系统中有多个进程/线程等待执行时,CPU 只能执行完一个再执行下一个。
计算机在运行过程中,有很多指令会涉及 I/O 操作,而 I/O 操作又是相当耗时的,速度远远低于 CPU,这导致 CPU 经常处于空闲状态,只能等待 I/O 操作完成后才能继续执行后面的指令。
为了提高 CPU 利用率,减少等待时间,人们提出了一种 CPU 并发工作的理论。
所谓并发,就是通过一种算法将 CPU 资源合理地分配给多个任务,当一个任务执行 I/O 操作时,CPU 可以转而执行其它的任务,等到 I/O 操作完成以后,或者新的任务遇到 I/O 操作时,CPU 再回到原来的任务继续执行。
虽然 CPU 在同一时刻只能执行一个任务,但是通过将 CPU 的使用权在恰当的时机分配给不同的任务,使得多个任务在视觉上看起来是一起执行的。CPU 的执行速度极快,多任务切换的时间也极短,用户根本感受不到,所以并发执行看起来才跟真的一样。
并行(Parallelism)
并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。和单核 CPU 不同,多核 CPU 真正实现了“同时执行多个任务”。
多核 CPU 内部集成了多个计算核心(Core),每个核心相当于一个简单的 CPU,如果不计较细节,你可以认为给计算机安装了多个独立的 CPU。
多核 CPU 的每个核心都可以独立地执行一个任务,而且多个核心之间不会相互干扰。在不同核心上执行的多个任务,是真正地同时运行,这种状态就叫做并行。
例如,同样是执行两个任务,双核 CPU 的工作状态如下图所示:
双核 CPU 执行两个任务时,每个核心各自执行一个任务,和单核 CPU 在两个任务之间不断切换相比,它的执行效率更高。
思考一下
那么这里我们讲了关于并发、并行概念与我们的接口最大并发处理数之间有什么关系嘞?放心这都是铺垫,为了让你好消化后面的内容。
这里我给大家总结下并发与并行的概念:
并发:在同一时间段内,多个任务都在执行,但不一定是同时执行。这意味着这些任务在轮流使用 CPU 的时间片,给人一种它们在“同时”运行的错觉。并发的真正含义在于,尽管多个程序或进程可能正在运行,但每次只有一个进程或线程实际上正在使用 CPU。
并行:指在同一时刻,多个任务都在执行。这通常需要多个处理器或多核的 CPU 来实现,因为只有这样,每个处理器或核心才能在同一时刻执行一个任务。例如,当音乐软件和 IDEA 同时运行时,如果计算机有两个以上的 CPU 核心,那么这两个应用程序就可以真正地并行运行。
大家注意我上面加粗的字体,并发强调的是在同一段时间内,它是一个时间范围的概念。打个比方,并发是一个人同时吃三个馒头,吃完一个馒头需要 1 分钟,他就算胃口在大,也只能一个一个馒头吃,吃完三个需要花 3 分钟。
再看并行,并行强调的在同一时刻。打个比方,并行就是三个人同时吃三个馒头。这三个人可以在同一时刻一人吃一个馒头。吃完三个只需要花 1 分钟。
那么看到这里,我在问你个问题,3 个人的在 3 分钟内最多能吃多少个馒头?
相信大家都能告诉我。
理解接口的最大并发处理数
在 Java 语言里面,我们怎么理解并发跟并行嘞?还是跟吃馒头一样,我给大家打个比方,相信大家就明白了。
比如说我有一个接口,他的 RT (响应时长)是 50 毫秒,只有一个线程处理客户端请求,那这个线程在 1000 毫秒就能够处理 20 个客户端请求。
这里 20 就代表一个线程在 1 秒内的最大并发数。
那假如有两个线程处理客户端请求,接口的最大并发数是不是变成了 40,三个线程处理客户端请求,接口的最大并发数就变成了 60,以此类推。
这里我们就可以得出一个公式,线程个数 * 单线程最大并发数 就代表接口的最大并行处理数。
那么根据公式,我们得出一个结论,通过增大线程数或者减少接口响应时间可以增大接口的最大并发处理数。
聊聊 Tomcat 容器的并发处理配置
在 Spring Boot 发布后,Tomcat 就成为了 Spring Boot 默认的 web 容器。这里结合上文内容,给大家讲解下 Spring Boot 中涉及 Tomcat 服务器的一些关键参数,以及在高并发情况下如何通过这些参数来控制请求量。Spring boot 配置文件如下,
SpringBoot 版本:3.1.5
server:port: 8080tomcat:threads:max: 200min-spare: 10accept-count: 100max-connections: 8192server.port
该参数用于指定服务器监听的端口号。通过配置不同的端口号,可以实现多个服务在同一主机上并行运行。
这里为了方便大家理解,我用开饭店来给大家做比喻。通过指定服务器 ip + 启动端口,就相当于告诉顾客我们的饭店位置,等待顾客上门吃饭。
server.tomcat.threads.max
该参数定义了 Tomcat 服务器的最大线程数。在高并发情况下,可以通过增加最大线程数来提高服务器最大并发处理数的能力,但需要注意服务器的硬件资源限制。
threads.max 相当于设置饭店在最忙碌时候,需要的最大的服务员数量,假如说一个服务员只能服务 1 个客人,那么 200 个服务员就可以同时服务 200 个客人,注意这是并行服务哦。
server.tomcat.threads.min-spare
此参数用于设置服务器在空闲状态下保持的最小线程数。确保服务器在处理请求时有足够的线程可用,以避免延迟。
threads.min-spare 相当于设置饭店空闲时候需要的最少的服务员数量。
server.tomcat.max-connections
该参数指定服务器接受和处理的客户端最大连接数。超过这个限制后,会放入 accept-count 队列中
max-connections 相当于设置饭店空间内客人的最大容纳数量,注意是容纳,进了饭店的客人不是一进来就能享受服务的。往往还需要等待一段时间。这段时间就是当服务员服务上一个客人完毕后,有空出来的服务员才能给进店新客人服务。
server.tomcat.accept-count
此参数定义了当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。在高并发情况下,可以通过适当调整此参数来控制连接请求的排队长度。
accept-count 相当于设置饭店门口的排队人数大小。想一想我们外出吃饭的时候,什么情况需要排队,当然是店内爆满,没有座位。那么这个时候你就需要排个队了。注意如果说排队人都满了,怎么办?
这个时候饭店就会通知没有排上队,还想要假如排队的人,“你们不要排队了,今天吃饭人满了,大家去别处吃饭吧!”。
对应上 Tomcat 就是遇到客户端连接数量超过了 max-connections + accept-count 大小后的情况,此时 Tomcat 会直接拒绝新的客户端连接。
相关文章:
聊聊接口最大并发处理数
文章目录 前言并发和并行并发(Concurrency)并行(Parallelism)思考一下 前言 生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设…...
6.如何利用LIO-SAM生成可用于机器人/无人机导航的二维/三维栅格地图--以octomap为例
目录 1 octomap的安装 2 二维导航节点的建立及栅格地图的构建 3 三维栅格地图的建立 1 octomap的安装 这里采用命令安装: sudo apt install ros-melodic-octomap-msgs ros-melodic-octomap-ros ros-melodic-octomap-rviz-plugins ros-melodic-octomap-server 这样…...
【多传感器融合】BEVFusion: 激光雷达和视觉融合框架 NeurIPS 2022
前言 BEVFusion其实有两篇, 【1】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework. NeurIPS 2022 | 北大&阿里提出 【2】BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 2022 | MIT提出 本文先分…...
kafka中的常见问题处理
文章目录 1. 如何防⽌消息丢失2. 如何防⽌重复消费3. 如何做到消息的顺序消费4. 如何解决消息积压问题4.1 消息积压问题的出现4.2 消息积压的解决⽅案 5. 实现延时队列的效果5.1 应用场景5.2 具体方案 1. 如何防⽌消息丢失 ⽣产者:1)使⽤同步发送 2&…...
HarmonyOS(八)——@Styles装饰器:定义组件重用样式
前言 在前面我们介绍过Builder装饰器和BuilderParam装饰器。今天我们继续介绍另外一个装饰器——Styles装饰器:定义组件重用样式。 如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴&…...
手写VUE后台管理系统5 - 整合状态管理组件pinia
整合状态管理组件 安装整合创建实例挂载使用 pinia 是一个拥有组合式 API 的 Vue 状态管理库。 pinia 官方文档:https://pinia.vuejs.org/zh/introduction.html 安装 yarn add pinia整合 所有与状态相关的文件都放置于项目 src/store 目录下,方便管理 在…...
解决webpack打包生成gz格式css/js文件没法在nginx使用的问题--全网唯一正确
本文绝对是全网解决这个问题唯一正确的文章,没有之一! 很多人都说开启nginx gzip压缩,这些人完全是胡说八道!你们到底懂不懂叫gzip压缩啊?! 不信你就试试,如果css/js只有gz文件,ng…...
传统算法: Pygame 实现快速排序
使用 Pygame 模块实现了快速排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过快速排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序选择一个基准元素(pivot),将数组分成两部分,…...
HarmonyOS入门开发(三) 持久化存储Preferences
接入鸿蒙几天以来,发现各种和Android不一样的地方,今天来看一下Preferences存储 在Android中比如有ShardPreferences、Mmkv这些持久化存储方式,开发起来很方便,读取速度也很快,在鸿蒙里面也提供了对应的持久化存储方案…...
类和对象——(3)再识对象
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 你说那里有你的梦想,…...
【UGUI】实现背包的常用操作
1. 添加物品 首先,你需要一个包含物品信息的类,比如 InventoryItem: using UnityEngine;[CreateAssetMenu(fileName "NewInventoryItem", menuName "Inventory/Item")] public class InventoryItem : ScriptableObje…...
单机zk安装与zk四字命令
一、下载 Apache ZooKeeper可以在 Linux 系统中使用 wget 命令直接下载,官网地址 Apache ZooKeeper 二、解压 tar -zxvf apache-zookeeper-3.8.3-bin.tar.gz 进去解压的目录中, 进入到 zk 解压目录的 conf 目录,复制 zoo_sample.cfg 文件&a…...
matlab导入excel数据两种常见的方法
在MATLAB中导入Excel数据,你可以使用几种不同的方法。下面是两种常见的方法: 方法一:使用readtable函数 readtable函数允许你导入Excel文件中的数据,并将其存储为表格。 % 指定文件路径 filename C:\your\path\to\file.xlsx;%…...
华为全屋智能5.0,无为而“智”
在赖特西塔里埃森混凝土墙的中心壁龛里,一块铜牌上刻着一些英文,意思是“建筑的意义不是屋顶和墙,而是人们生活于其中的空间”。 这句话,取自老子《道德经》中的“凿户牖以为室,当其无,有室之用”。 《理想…...
Flask 实现Token认证机制
在Flask框架中,实现Token认证机制并不是一件复杂的事情。除了使用官方提供的flask_httpauth模块或者第三方模块flask-jwt,我们还可以考虑自己实现一个简易版的Token认证工具。自定义Token认证机制的本质是生成一个令牌(Token)&…...
MATLAB 和 Simulink 官方文档下载地址
MATLAB 官方文档中文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/matlab/index.html 如图: MATLAB 官方文档英文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/matlab/index.html?langen 如图: Simulink 官…...
【Element】el-switch开关 点击弹窗确认框时状态先改变----点击弹窗取消框失效
一、背景 需求:在列表中添加定期出账的开关按钮,点击开关时,原来的状态不改变,弹出弹窗;点击弹窗取消按钮:状态不改变,点击弹窗确定按钮:状态改变,并调取列表数据刷新页…...
Java 中最常用的设计模式之一,工厂模式模式的写法,
文章目录 工厂模式1、简单工厂模式2、工厂模式3、抽象工厂4、总结 工厂模式 工厂模式是 Java 中最常用的设计模式之一,工厂模式模式的写法有好几种,这里主要介绍三种:简单工厂模式、工厂模式、抽象工厂模式 1、简单工厂模式 这里以制造cof…...
HTML的学习
知己知彼百战不殆 打算学习一下javascript 所以先从基础的html语言开始 其实就是头部 和身体 头部控制整个 html的语言 title等 <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"width…...
JS设计模式 — 行为委托
回顾一下原型,发现[[Prototype]]机制就是指对象中的一个内部链接引用另一个对象,这个机制的本质就是对象之间的关联关系 1、面相委托的设计 Task {setID: function(ID) { this.id ID; },outputID: function() { console.log( this.id ); } }; // 让 …...
Triton模型服务实战:生产级部署、监控与故障排查
1. 项目概述:当模型走出Jupyter,真正开始呼吸真实世界的空气“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号,专为那些在Jupyter里调通了模型、画出了漂亮ROC曲线、却在部署时被现实迎…...
WinAsar:告别命令行!551KB的Electron asar文件可视化处理神器
WinAsar:告别命令行!551KB的Electron asar文件可视化处理神器 【免费下载链接】WinAsar Portable and lightweight GUI utility to pack and extract asar( Electron archive ) files, Only 551 KB! 项目地址: https://gitcode.com/gh_mirrors/wi/WinA…...
AR/VR智能眼镜主板设计:从高通平台选型到量产调试全解析
1. 项目概述:从芯片到眼镜,一次完整的AR/VR智能眼镜主板设计之旅 最近几年,智能眼镜的浪潮又回来了,但这次不再是简单的信息提示器,而是真正能承载复杂应用、具备独立计算能力的VR/AR终端。我作为硬件开发的老兵&#…...
别再为Tesseract中文识别报错发愁了!手把手教你搞定chi_sim语言包和环境变量配置
Tesseract中文识别实战:从报错排查到精准配置的全流程指南 当你在终端兴奋地输入第一行Tesseract命令,却看到刺眼的Failed loading language chi_sim报错时,那种挫败感我深有体会。这个看似简单的错误背后,往往隐藏着路径配置、文…...
Puerts在UE5中实现TypeScript与蓝图无缝交互的实战指南
1. 这不是“加个插件就能用”的事:为什么Puerts在UE5里常被低估又频繁踩坑我第一次在UE5.1项目里集成Puerts时,以为照着GitHub README跑完C编译、TS声明生成、蓝图调用三步就能收工。结果花了整整三天——不是卡在编译失败,而是卡在“调用成功…...
三年级下册语文第四单元作文:中华传统节日
三年级下册语文《中华传统节日》作文,一般会写:春节元宵节端午节中秋节重点不是介绍很多知识,而是: ✅ 节日习俗 ✅ 自己的经历 ✅ 节日气氛 ✅ 感受我用夸克网盘分享了「三年级下册语文作文1-8单元」,链接:…...
用 n8n 搭建自己的自动化工作流平台
用 n8n 搭建自己的自动化工作流平台分类:开源项目部署n8n 适合Webhook、邮件通知、表单处理和 API 自动化。这类主题真正跑起来并不难,难的是上线后稳定、可备份、能排错。本文按实操方式整理一套可以直接落地的流程,默认你已经会登录 Linux …...
基于瑞萨R8C MCU的180度电角度无感FOC BLDC电机控制方案详解
1. 项目概述与核心需求解析大家好,我是老王,一个在电机控制和嵌入式系统开发领域摸爬滚打了十几年的工程师。今天想和大家深入聊聊一个非常具体且有意思的项目:如何基于瑞萨电子的R8C系列MCU,来实现一套180度电角度控制的无刷直流…...
Pacemaker + PostgreSQL 16 + 仲裁模式高可用集群部署指南
文档版本信息 版本: v1.0 更新日期: 2026-05-22 适用系统: CentOS 7/8, RHEL 7/8, Rocky Linux 8/9 数据库版本: PostgreSQL 16.x 集群软件: Pacemaker + Corosync + PCS 仲裁模式: QDevice (Quorum Device) 一、架构概述 1.1 整体架构图 ┌───────────…...
西安家谱企业服务商
如果你还认为家谱印刷只是老年市场的“老古董”,那你就错得离谱了。2024年,中国家谱印刷市场规模已突破58亿元,年复合增长率达21.3%,远超普通印刷行业。这背后,是新一代家庭对姓氏文化、家族记忆的数字化与实体化需求爆…...
