您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

聊聊接口最大并发处理数

时间:2023-11-20 14:37:33  来源:微信公众号  作者:waynblog

今天跟大家聊聊一个 JAVA 界的老话题,就是怎么理解接口的最大并发处理数。

前言

生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习查资料时都了解过互联网系统设计三高指标,那就是高并发、高性能、高可用。本文主要讲高并发、高性能相关。本质上高性能也是为了给高并发铺平道路。而高并发设计中一部分就是对应了本文主题接口最大并发数。本文思维导图如下,

聊聊接口最大并发处理数

并发和并行

再开始讲并发之前,我需要再给大家回顾一些旧知识。

什么是并发?什么是并行...

并发(Concurrency)

早期计算机的 CPU 都是单核的,一个 CPU 在同一时间只能执行一个进程/线程,当系统中有多个进程/线程等待执行时,CPU 只能执行完一个再执行下一个。

计算机在运行过程中,有很多指令会涉及 I/O 操作,而 I/O 操作又是相当耗时的,速度远远低于 CPU,这导致 CPU 经常处于空闲状态,只能等待 I/O 操作完成后才能继续执行后面的指令。

为了提高 CPU 利用率,减少等待时间,人们提出了一种 CPU 并发工作的理论。

所谓并发,就是通过一种算法将 CPU 资源合理地分配给多个任务,当一个任务执行 I/O 操作时,CPU 可以转而执行其它的任务,等到 I/O 操作完成以后,或者新的任务遇到 I/O 操作时,CPU 再回到原来的任务继续执行。

下图展示了两个任务并发执行的过程:

聊聊接口最大并发处理数

图片来源自C语言中文网-并发和并行的区别(图解)

虽然 CPU 在同一时刻只能执行一个任务,但是通过将 CPU 的使用权在恰当的时机分配给不同的任务,使得多个任务在视觉上看起来是一起执行的。CPU 的执行速度极快,多任务切换的时间也极短,用户根本感受不到,所以并发执行看起来才跟真的一样。

并行(Parallelism)

并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。和单核 CPU 不同,多核 CPU 真正实现了“同时执行多个任务”。

多核 CPU 内部集成了多个计算核心(Core),每个核心相当于一个简单的 CPU,如果不计较细节,你可以认为给计算机安装了多个独立的 CPU。

多核 CPU 的每个核心都可以独立地执行一个任务,而且多个核心之间不会相互干扰。在不同核心上执行的多个任务,是真正地同时运行,这种状态就叫做并行。

例如,同样是执行两个任务,双核 CPU 的工作状态如下图所示:

聊聊接口最大并发处理数

图片来源自C语言中文网-并发和并行的区别(图解)

双核 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: 8080
  tomcat:
    threads:
      max: 200
      min-spare: 10
    accept-count: 100
    max-connections: 8192

server.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 会直接拒绝新的客户端连接。



Tags:接口   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
聊聊接口最大并发处理数
今天跟大家聊聊一个 Java 界的老话题,就是怎么理解接口的最大并发处理数。前言生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习...【详细内容】
2023-11-20  Tags: 接口  点击:(0)  评论:(0)  加入收藏
脑机接口正在“接入”现实
安因中风瘫痪,她使用脑机接口将大脑信号转化为虚拟人物的语言和动作。图片来源:《自然》网站科技日报记者 张佳欣在美国加州旧金山的一个实验室里,一位名叫安的来自加拿大...【详细内容】
2023-11-20  Tags: 接口  点击:(4)  评论:(0)  加入收藏
深入探究Java类继承与接口实现
类索引、父类索引和接口索引是在JavaClass文件中用来确定类的继承关系的重要数据。通过这些索引,Java虚拟机可以准确地建立类之间的继承关系,实现多态性和接口的实现。首先,类...【详细内容】
2023-11-17  Tags: 接口  点击:(7)  评论:(0)  加入收藏
一文读懂以太网接口物理DOWN故障及解决方案!
一、接口物理Down概念以太网接口是提供给用户操作或配置的真实存在、有器件支持的物理接口,主要用于接收和发送数据。接口保持正常UP状态是设备正常运转的最基本条件。当接口...【详细内容】
2023-11-16  Tags: 接口  点击:(16)  评论:(0)  加入收藏
串口服务器能实现B接口功能吗?
想了解串口服务器能不能实现B接口功能,首先我们得明白串口服务器的工作原理串口服务器串口服务器提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP协议网络接口,实现R...【详细内容】
2023-11-09  Tags: 接口  点击:(11)  评论:(0)  加入收藏
SpringBoot接口参数校验N种实用技巧大揭秘
环境:SpringBoot2.6.12实际的开发工作中大部分的接口都是需要进行参数有效性校验的,参数可能是简单的基本数据类型,也可能是对象类型,基本上所有接收参数的接口都是需要对这些参...【详细内容】
2023-11-08  Tags: 接口  点击:(21)  评论:(0)  加入收藏
OpenHarmony4.0发布:新增4000多个API接口,交互及隐私能力增强
钛媒体App 11月6日消息,以“技术筑生态,智联赢未来”为主题的第二届OpenHarmony技术大会在北京举办,活动中,OpenHarmony 4.0版本正式发布。据介绍,OpenHarmony4.0版本开发套件同...【详细内容】
2023-11-07  Tags: 接口  点击:(17)  评论:(0)  加入收藏
API接口参数验证的必备神器,让你的代码更高效!
环境:Springboot2.6.121. 简介Spring Validation是一种轻量级的数据验证框架,主要用于对Java对象进行校验。它为数据验证提供了统一的接口和基本的校验功能,解决了数据校验这一...【详细内容】
2023-11-07  Tags: 接口  点击:(19)  评论:(0)  加入收藏
聊聊接口重试机制的几种解决方案
1.前言接口请求重试机制是保证系统稳定性和容错能力的重要手段之一。当接口请求发生失败或暂时性错误时,通过重试机制可以提高请求的成功率。本文将详细介绍接口请求重试机...【详细内容】
2023-11-06  Tags: 接口  点击:(23)  评论:(0)  加入收藏
SpringBoot 调用外部接口的四种方式
1、简介在Spring-Boot项目开发中,当本模块的代码需要访问外面模块接口,或外部url链接的需求的时候, 需要使用网络连接调用,下面提供了四种方式(排除dubbo的方式)供大家选择。方式...【详细内容】
2023-11-06  Tags: 接口  点击:(13)  评论:(0)  加入收藏
▌简易百科推荐
聊聊接口最大并发处理数
今天跟大家聊聊一个 Java 界的老话题,就是怎么理解接口的最大并发处理数。前言生活在 2023 年的互联网时代下,又是在国内互联网越发内卷的背景下,相信大家面试找工作、网上学习...【详细内容】
2023-11-20  waynblog  微信公众号  Tags:接口   点击:(0)  评论:(0)  加入收藏
通过实例理解Web应用跨域问题
在开发Web应用的过程中,我们经常会遇到所谓“跨域问题(Cross Origin Problem)”。跨域问题是由于浏览器的同源策略(Same-origin policy)[1]导致的,它限制了不同源(Origin:域名...【详细内容】
2023-11-20  TonyBai  微信公众号  Tags:Web应用   点击:(1)  评论:(0)  加入收藏
深入理解CPU缓存一致性协议MESI
今天,我们就深入聊聊关于CPU缓存一致性协议MESI的有关知识,希望能够为小伙伴们带来实质性的帮助。好了,不多说了,进入今天的正题。CPU高速缓存CPU为何要有高速缓存CPU在摩尔定律...【详细内容】
2023-11-20  冰河技术  微信公众号  Tags:CPU缓存   点击:(2)  评论:(0)  加入收藏
解密 SSE,像 ChatGPT 一样返回流式响应
我们知道目前的 HTTP/1.1 采用的是标准的请求-响应模型,客户端主动发请求,服务端被动地返回响应。这种模型在客户端需要实时获取结果的场景下是不合适的,因为这意味着客户端需...【详细内容】
2023-11-20  古明地觉的编程教室  微信公众号  Tags:ChatGPT   点击:(2)  评论:(0)  加入收藏
RabbitMQ插件开发指南:定制化你的消息队列
RabbitMQ是一个功能强大的消息队列系统,它提供了灵活的插件机制,使用户能够定制化自己的消息队列。下面将为您介绍RabbitMQ插件开发的指南,让您能够根据自己的需求编写定制化的...【详细内容】
2023-11-20  编程技术汇  今日头条  Tags:RabbitMQ   点击:(4)  评论:(0)  加入收藏
读懂这一篇,集群节点不下线
问题一直在发生1. I'm NotReady阿里云有自己的 Kubernetes 容器集群产品。随着 Kubernetes 集群出货量的剧增,线上用户零星的发现,集群会非常低概率地出现节点 NotReady...【详细内容】
2023-11-20    云原生运维圈  Tags:集群   点击:(2)  评论:(0)  加入收藏
GitHub:程序员正积极使用 AI 编程、JavaScript 语言依然最流行
IT之家 11 月 20 日消息,GitHub 发布了 2023 年度 Octoverse 开源状态报告,其中主要强调了 AI 在开发过程中的作用,并围绕云和 Git 的开源活动展开。官方介绍称,今年的三大趋势...【详细内容】
2023-11-20    IT之家  Tags:AI 编程   点击:(3)  评论:(0)  加入收藏
分片并不意味着分布式
Sharding(分片)是一种将数据和负载分布到多个独立的数据库实例的技术。这种方法通过将原始数据集分割为分片来利用水平可扩展性,然后将这些分片分布到多个数据库实例中。1*yg3P...【详细内容】
2023-11-20  小技术君  微信公众号  Tags:分布式   点击:(3)  评论:(0)  加入收藏
Angular怎么还没死
作者丨Mohit Pandey编译丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)Angular已经完全改版了。“欢迎来到Angular的复兴,”Angular官方在X(twitter)上发布了这样一条帖子。图片正如...【详细内容】
2023-11-20    51CTO  Tags:Angular   点击:(4)  评论:(0)  加入收藏
Vite 5 正式发布,性能大幅提
Vite 5 现已发布,这是 Vite 发展道路上的又一个重要里程碑。新版本采用了 Rollup 4,大大提升了构建性能;此外还带来了一些新选项,可用于提高开发服务器的性能。公告指出,Vite 5...【详细内容】
2023-11-20    OSC开源社区  Tags:Vite   点击:(3)  评论:(0)  加入收藏
站内最新
站内热门
站内头条