当前位置: 首页 > news >正文

【多线程的常见使用场景】

文章目录

  • 多线程导出Excel的应用
  • 业务中需要异步发送邮件、信息等场景
  • 业务中解析对账文件

多线程导出Excel的应用

背景:随着数据订单量的增加,导出的数据量越来越大,单线程导出,对于少量数据,性能上的表现,还不是很明显,对于100万以上的数据,单线程导出,就会长时间的阻塞,甚至还会出现内存溢出的情况,导致用户体验比较差,因此我们需要考虑多线程同时进行查询,来保证我们的数据的性能提升。

前置条件:在考虑多线程导出,我们首先要考虑,我们的服务器的最大承载的数据量的大小,按照8核16G的服务器来说,我们新生代有5G的大小,因此eden区会有进4G的大小,按照每条数据生成的对象,占300字节,我们1G大概可以承载数据375万,因此,我们只需要考虑好分页,以及当前的线程数即可。
线程池设置:我们查询属于IO密集型,因此可以先设置基本的参数 核心线程数 32 最大线程数 64 阻塞队列 50 存活时间 30s 拒绝策略:取消当前任务:
分页:每条线程大概查询20万的数据即可,因此我们需要提前将总数查询出,这样给导出分配需要的线程数。
为了保证单个文件太大,导致打不开的情况,我们按照数据量分文件,每个文件20万,最后再考虑将所有的文件合并压缩,返回给用户。

业务中需要异步发送邮件、信息等场景

背景:在一些业务场合中,如果我们在操作一些业务时,需要发送邮件或者短信告知用户,又不想阻塞当前主线程的执行,此时我们需要异步的执行一些邮件发送或者短信发送。
注解@Async
在 Spring Boot 中,@Async 注解的默认线程池核心线程数是 8。这是 Spring Boot 自动配置的默认行为,具体细节如下:
默认线程池配置(Spring Boot 2.x/3.x)
配置项 默认值
核心线程数 8 (spring.task.execution.pool.core-size)
最大线程数 Integer.MAX_VALUE (无上限)
队列容量 Integer.MAX_VALUE (无界队列)
此线程池配置可能有内存溢出的情况,因此我们需要修改其参数,来保证任务的执行。

业务中解析对账文件

背景:对账文件,结算机构会以机构号为标准,会以zip的压缩文件发送到服务器上,我们需要将对账文件中的内容解析,落到本地的磁盘。因此需要多线程来进行解析,提升文件解析的时间,保证我们的内容更快地解析完成。
注意点:
1.文件内容的数量,保证内存不溢出的情况下,多线程解析文件,将文件内容落磁盘。
2.考虑线程池的配置,核心线程池,最大线程池,阻塞队列,存活时间,线程工厂,拒绝策略等。
3.使用CountDownLatch,来计数保证所有的线程文件解析完成后,再考虑进行下面的业务。

http://www.dtcms.com/a/283096.html

相关文章:

  • 工业自动化中EtherCAT转Profinet网关的速度控制模式配置与优化
  • 破壳萌图鉴(宝可梦) 2.1.2311052226/界面简洁流畅,没有广告
  • Optional:orElse 和 orElseGet 的底层逻辑,决定了它们的本质区别
  • 大模型呼叫系统选型指南:以云蝠智能VoiceAgent为核心的企业升级路径
  • Linux 下安装DM8数据库详细教程
  • Linux下保存Docker镜像文件至本地及启动
  • CSS:transition语法
  • Linux 定时器应用示例(修正版)
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十八课——图像高斯滤波金字塔的实现
  • RCV在电力大数据平台中的集成与标准化建设:推动数据资产价值释放的关键途径
  • 每日钉钉API探索:getAuthCode实现免登授权
  • STM32超声波模块
  • 基于Matlab改进大津法和Gabor滤波的织物缺陷检测系统
  • Java-数构链表
  • 聚合配送与传统配送平台的差异:从运营模式到市场价值
  • XXE漏洞3-通过 XXE 漏洞实现文件读取及端口探测
  • 开源Agent平台Dify源码剖析系列(四)核心模块core/agent之CotAgentRunner
  • SMTPman,发送邮件服务器smtp的功能详解!
  • 统计功效是什么?
  • ST17H36 蓝牙Soc开发(4)—— 外设应用1
  • mac电脑无法阅读runc源码
  • 【网易云-header】
  • HarmonyOS从入门到精通:自定义组件开发指南(九):组件复合与组合模式探秘
  • S7-1200 数字量模块接线:从源型 / 漏型到信号板扩展全解析
  • 【Tools】Saleae Logic 16软件安装教程
  • 【人工智能99问】损失函数有哪些,如何选择?(6/99)
  • 道可云人工智能每日资讯|天津市人工智能(AI+信创)创新生态联盟成立
  • 手撕设计模式之消息推送系统——桥接模式
  • MyBatis详解以及在IDEA中的开发
  • TRAE + Milvus MCP:用自然语言 0 门槛玩转向量数据库