使用FutureTask来提高接口的并发性能优化经验以及踩坑记录

devtools/2024/9/24 21:24:55/

背景:

批量数据采集接口,随着时间的推移,设备一次性上传的数据包越来越大,大到一次性需要处理64条数据,而每条数据需要花费大量的时间去处理,那么如果串行对任务进行处理的话,那么总时间就是N * 64

神操作来了:

使用FutureTask来进行并发操作

1、需要先定义一个并发处理线程池

1)注意注意,需要注意核心线程参数设置,否则会暴雷

2)  注意注意,需要注意队列和最大线程数设置,否则会暴雷

// 定义一个任务列表,方便后面阻塞获取线程执行的结果
List<FutureTask<SaveCollectDataReq>> taskList = new ArrayList<>(); 
for (SaveCollectDataReq saveCollectDataReq : saveCollectDatas) {FutureTask<SaveCollectDataReq> futureTask = new FutureTask(new BatchProduceTask(saveCollectDataReq, processOrderProduceService));taskList.add(futureTask);// 这里是将任务快速提交到线程池,并发处理taskAsyncExecutor.submit(futureTask);}
for (FutureTask<SaveCollectDataReq> saveCollectDataReqFutureTask : taskList) {SaveCollectDataReq saveCollectDataReq = null;try {// 这里是获取并发处理的结果,方便后续的操作saveCollectDataReq = saveCollectDataReqFutureTask.get();if (Objects.isNull(saveCollectDataReq)) {continue;}} catch (InterruptedException | ExecutionException e) {log.error("数据批处理过程异常:",e);throw new AiipcBizException(e.getMessage());}
}

上面的代码上没什么坑,主要的坑在于线程池,线程的核心数、最大数、队列数以及拒绝策略,这几个参数都会影响接口的执行效率,了解一下

CallerRunsPolicy拒绝策略,这个策略是干什么的呢,他不会像其他策略那样抛弃任务或直接报异常,他会退化成由调用者执行这个任务,坑爹的地方自己想吧。

http://www.ppmy.cn/devtools/24585.html

相关文章

CHiME-8多通道远场语音识别Baseline介绍

语音领域每年都有很多比赛&#xff0c;每个比赛都有自己的侧重点&#xff0c;其中CHiME系列比赛的侧重点就是多通道远场语音识别&#xff0c;与其他的语音识别比赛有所区别的是&#xff0c;CHiME提供分布式麦克风和麦克风阵列数据&#xff0c;这样可以选择合适的前端算法以降低…

虚拟机网络桥接模式无法通信,获取到的ip为169.254.X.X

原因&#xff1a;VMware自动选择的网卡可能不对 解决&#xff1a;编辑-虚拟网络编辑器-更改桥接模式-选择宿主机物理网卡&#xff0c;断开虚拟机网络连接后重新连接即可

从零手写实现 apache Tomcat-01-入门介绍

创作缘由 平时使用 tomcat 等 web 服务器不可谓不多&#xff0c;但是一直一知半解。 于是想着自己实现一个简单版本&#xff0c;学习一下 tomcat 的精髓。 怎么实现一个 tomcat 呢&#xff1f; Tomcat就像是一个用Java语言搭起来的大舞台&#xff0c;专门用来演出那些用Jav…

驱动电路的设计

采用驱动芯片EG2104来驱动MOS管。 图 3.6 驱动电路 如图3.6是驱动电路原理图&#xff0c;EG2104 是一款高性价比的带SD死区功能的 MOS 管、IGBT 管栅极驱动专用芯片。内部集成了逻辑信号输入处理电路、死区时控制电路、电平位移电路、脉冲滤波电路及输出驱动电路。C1是滤波电容…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例&#xff08;AP与AC间二层转发&#xff09; 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示&#xff0c;某企业的移动终端通过WLAN连接网络&#xff0c;AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

在kuboard中添加k8s集群

1.登录kuboard后&#xff0c;点击添加集群面板 系统会跳转到k8s集群添加页面&#xff0c;按照页面提示输入自身的集群信息即可&#xff0c;此处没有什么难点。 添加成功后&#xff0c;点击集群面板&#xff0c;然后点击集群概要信息&#xff0c;就可以查看集群节点信息。 集群节…

力扣数据库题库学习(4.29日)--1633. 各赛事的用户注册率

1633. 各赛事的用户注册率 问题链接 问题分析 编写解决方案统计出各赛事的用户注册百分率&#xff0c;保留两位小数。返回的结果表按 percentage 的 降序 排序&#xff0c;若相同则按 contest_id 的 升序 排序。 注册率是单个项目的注册人数与总人数的比率。 涉及的知识点主…

使用Excel生成sql脚本(insert/update/delete)

目录 前言 一、Excel文件脚本变量 二、操作示例 前言 在系统使用初期&#xff0c;存在某种原因&#xff0c;需要对数据库数据进行批量处理操作。往往都是通过制定Excel表格&#xff0c;通过Excel导入到数据库中&#xff0c;所以就弄一个excel生成sql的导入脚本&#xff0c;希…