并发请求接口调试

背景

项目开发过程中,有一项需求是5000个项目,需要以HTTP接口请求方式去调用对应的算法接口来进行处理。单个项目需要调用3-4个算法接口,串行方式调用预估需要5000 x 4 = 20000次接口请求。
单个接口预计耗时500ms,则预计总耗时,10000s,这个时间是不可接受的。这时候就需要采用线程并发的方式,去向算法服务端发起请求,来并行处理项目。

实际操作

第一种方式

直接在客户端代码内,对5000个项目串行调用算法接口。

public void test(){for( int i = 0; i < projects.size(); i++ ){// test1内部发起http请求对应算法接口testService.test1();}for( int i = 0; i < projects.size(); i++ ){// test2内部发起http请求对应算法接口testService.test2();}for( int i = 0; i < projects.size(); i++ ){// test3内部发起http请求对应算法接口testService.test3();}
}
问题:
  1. 客户端报出 java.net.BindException: Address already in use: bind 异常,原因是在于请求服务端算法接口时,每一次请求都会占用本机对应的一个端口与服务端建立连接(通常本机5000 - 65534 端口由于建立TCP/IP连接),当发起的请求数量超过了这个范围的端口数量,就会报出上述异常。原因也就是因为本机发起过多的请求。一般请求完成之后会240s的时间,会将连接释放,该问题也可以通过缩短time_wait的时间来进行解决。
  2. 该方式由于是串行进行请求,总的耗时预计在5000 x 4 x 0.5 = 10000s时间,处理时间太漫长。

第二种方式

直接在客户端代码内,对每一个项目创建一个线程,然后线程内部按逻辑顺序调用算法接口。这样就在客户端创建了5000个线程,并行访问服务端算法接口。

public void test(){for( int i = 0; i < projects.size(); i++ ){new Thread( ()->{// test1内部发起http请求对应算法接口testService.test1();// test2内部发起http请求对应算法接口testService.test2();// test3内部发起http请求对应算法接口testService.test3();});}}
问题:
  1. 客户端报出 java.net.ConnectException: Connection refused 异常,原因是在于向服务端算法接口发起的请求数量过多,服务端请求队列满了之后将会拒绝建立新的连接。虽然在服务端设置,请求队列的长度,但是由于客户端请求的数量过多,需要对于大量延迟处理的请求进行管理。实现的难度较大。

第三种方式

将5000个项目分成100个线程去处理,每个线程内部串行处理50个项目。

public void test(){for (int i = 0; i < 100; i++) {new Thread( ()->{for (int j = 0; j < 50; j++) {// test1内部发起http请求对应算法接口testService.test1();// test2内部发起http请求对应算法接口testService.test2();// test3内部发起http请求对应算法接口testService.test3();}});}}
好处:
  1. 可以控制线程的数量,从而控制在单位时间内向接口并发请求的数量,减低服务端的压力。
  2. 可以发挥并行处理的优势。
  3. 基于此项目,发起请求的粒度仍为单个项目,无需采用将项目分块之后再发起请求,降低请求数量的方式。从而降低实现的复杂性,也可以减少参数传输和处理上的时间消耗。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024自动化测试市场分析

大家都说2024年软件测试讲会卷的更厉害,从原来的功能测试到现在自动化测试,那么2024年是否可以学习自动化冲一把,我们先看一下2023年自动化测试在测试行业中的分析: 1.市场需求增长&#xff1a; 随着技术的进步和企业对软件质量的要求日益提高&#xff0c;自动化测试在测试行…

esp32s3中启动flash加密的问题

为了防止通过esptool.py read_flash命令将固件以明文的方式提取出来&#xff0c;所以启动flash加密非常有必要。 1。在项目根目录打开配置菜单idf.py menuconfig&#xff0c;选择Security features菜单&#xff0c;然后再选择 Enable flash encryption on boot即可。 2。编…

手把手微调大模型【附:一镜到底视频教程】

前言 近期有很多小伙伴来问是否有大模型微调教程&#xff0c;其实目前网上有很多教程&#xff0c;但是据了解&#xff0c;由于网上教程质量参差不齐&#xff0c;导致很多小伙伴尤其是初学者&#xff0c;一坑未出又入一坑&#xff0c;有种从入门到放弃的感觉。于是乎&#xff0…

小米消金引领创新,打造重庆消费金融新生态

新生产力催生消费新机遇。近年来&#xff0c;数智化赋能已深入消费金融及实体经济的各个环节&#xff0c;成为提振消费、释放内需的重要动能。据悉&#xff0c;3月20日&#xff0c;首届“消费金融高峰论坛&#xff08;重庆&#xff09;”在重庆盛大开幕。重庆小米消费金融有限公…

Linux提权--内核漏洞--web用户提权(脏牛)本地提权(脏管道)

免责声明:本文仅做技术交流与学习... 目录 Linux-内核漏洞Web用户提权-探针&利用-脏牛dcow nmap扫描目标IP及端口 导入脚本,进行探针 通过MSF发现目标机器存在脏牛漏洞 ---上传信息搜集的文件,查找漏洞,利用漏洞,继续上传EXP. --密码改了,再用xshell连一下就行了. …

VMware VCP考试快速通过的方法

VMware VCP-DVC 2024年5月10号刚有同事考过的&#xff0c;可以一条龙 &#xff0c;非常省心&#xff0c;最重要的是稳 总结 通过VCP(VMware Certified Professional)认证&#xff0c;需要参加培训机构的的培训&#xff08;没有时间&#xff1f;当然也可以不&#xff09;&…

2839. 判断通过操作能否让字符串相等 I

题目描述&#xff1a; 给你两个字符串 s1 和 s2 &#xff0c;两个字符串的长度都为 4 &#xff0c;且只包含 小写 英文字母。 你可以对两个字符串中的 任意一个 执行以下操作 任意 次&#xff1a; 选择两个下标 i 和 j 且满足 j - i 2 &#xff0c;然后 交换 这个字符串中两…

[嵌入式系统-75]:RT-Thread-快速上手:正点原子探索者 STM32F407示例

目录 正点原子探索者 STM32F407 上手指南 1. 简介 2. 准备工作 3. 运行第一个示例程序 3.1 编译下载 3.2 运行 继续学习 正点原子探索者 STM32F407 上手指南 1. 简介 探索者 STM32F407 是正点原子推出的一款基于 ARM Cortex-M4 内核的开发板&#xff0c;最高主频为 16…

施工技术杂志社投稿信箱邮箱

施工技术杂志投稿信箱邮箱 产品说明 《施工技术》杂志 《施工技术》 投稿信箱&#xff1a;sgjszzs126.com 《施工技术》 投稿信箱&#xff1a;sgjszzs126.com 《施工技术》 投稿信箱&#xff1a;sgjszzs126.com 咨询电话&#xff1a;13356222771 咨询电话&#xff1a;1…

即将研究生入学,记录一些遇到的疑问

以下是目前情况。 19年入学东北林业大学&#xff0c;23年毕业&#xff0c;24考研二战本校调剂至福州大学矿业工程。 所幸&#xff0c;有课题组做与计算机交叉的智慧矿山方向&#xff0c;并联系了第一位导师。等待一月有余&#xff0c;该导师通知我说他的第二个研究生名额未拿到…

双等号运算符的运算和转换规则

1. 运算规则 两端存在 NaN&#xff0c;返回 false NaN NaN; // false NaN 1; //false undefined 和 null 只有与自身比较&#xff0c;或者相互比较时&#xff0c;才返回 true&#xff0c;和其他原始类型比较都返回 false。 undefined null; // true undefined undefine…

积木玩具CPC认证,CPC认证常规周期及流程

积木玩具CPC认证概述 CPC认证的必要性 CPC认证&#xff0c;即儿童产品证书&#xff08;Childrens Product Certificate&#xff09;&#xff0c;是指面向12岁及以下儿童的玩具产品必须符合美国联邦安全标准的一种认证。积木玩具因其结构的开放性和多样性&#xff0c;成为了儿…

Nginx详解:高性能的Web服务器和反向代理服务器

Nginx是一款轻量级、高性能的Web服务器和反向代理服务器&#xff0c;以其出色的性能和稳定性而闻名于世。本文将深入探讨Nginx的各项特性、架构和功能&#xff0c;以及其在现代Web开发中的应用场景和优势&#xff0c;帮助读者更全面地了解和掌握这一优秀的服务器软件。 1. Ngi…

系统稳定性判定分析(二)---- 线性定常系统状态方程稳定性判据与n阶常微分方程稳定性判据的等价性

文章目录 n n n 阶线性齐次常微分方程与一阶常微分方程系统的等价转换多项式的根与常系数矩阵特征值的关联有关多项式得概念 n n n 阶线性齐次常微分方程与一阶常微分方程系统的等价转换 考虑如下 n n n 阶线性齐次常微分方程&#xff1a; a 0 x ( n ) a 1 x ( n − 1 ) ……

关键点检测——面部情绪数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

算法提高之字串变换

算法提高之字串变换 核心思想&#xff1a;双向广搜 双向bfs 建立两个队列 一起bfs到中间态 #include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <unordered_map>using namespace std;const int N 6;int n;…

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第6章 安装Samba

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

【数据结构】顺序表(一)

✨✨✨专栏&#xff1a;数据结构 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 不怕别人看不起&#xff0c;就怕自己不争气。路是人走出来的&#xff0c;关键要靠自己闯。振作起来&#xff0c;生活的含义就是前进。 目录 一、顺序表的概念&#xff1a; 二…

SQLite性能测试(插入)

最近一直在思考一个问题&#xff0c;SQLite 做到这么轻量级&#xff0c;那它注定不会像 MySql 一样强性能&#xff0c;那么它的性能怎么样呢&#xff1f;并发量多高呢&#xff1f; 官方解释&#xff1a; About SQLite 最大数据库大小&#xff1a;281TB 最大行大小&#xff1…

音视频--AAC编码解析和示例

目录 1&#xff1a;AAC编码介绍 2&#xff1a;AAC格式介绍 3&#xff1a;AAC -ADTS帧组成 4&#xff1a;AAC-ADTS&#xff1a;&#xff08;adts_fixed_header&#xff09;格式介绍 5&#xff1a;AAC-ADTS&#xff1a;&#xff08;adts_variable_header&#xff09;格式介绍…