【踩坑实录】生产上遇到的并发问题总结

生产上遇到很多并发问题,有很多是在编码阶段就可以避免的,总结一些需要考虑的要点如下:

  1. 使用并发的常见场景为针对大数据量遍历处理,考虑性能,采用并发处理。这是CPU密集型任务场景,同时出现多个任务时,性能不见得最优。
  2. 并发也有开销,不建议无脑并发。并发后堆栈会丢失,不方便排查问题。
  3. 异步开发模式具有传染性,比如使用可回调 Future 后,如果想要避免阻塞问题,需要使用map、flatMap语义。折中的方法是参考结构化并发,在必要位置等待,获取结果后清理资源。
  4. 需要注意副作用,尽量不要使用副作用。尽量不要修改共享的内容,比如本地缓存。
  5. 使用线程安全类 + 原子方法, ConcurrentHashMap 和 HashMap 相比,性能差别不大,而且内存占用基本一致,很多情况下可以直接替换。灵活使用 merge、computeIfAbsent 等方法,比如需要择优的场景,不需要重复写写命令式的逻辑。
  6. 考虑单次加载实现
  7. ConcurentHashMap 高并发时,可能有阻塞等待同一个桶位的问题,必须指定初始大小。
  8. 考虑线程池阻塞队列消费速度,防止某些捣蛋线程。
  9. 考虑处理拒绝任务异常,设计 fallback 策略。
  10. 并发超时或者任务取消时很容易出现线程泄露。
  11. 监控并发收益。
  12. 监控阻塞线程,防止惊群效应。
相关推荐
Cc.Y4 小时前
Java零基础入门:类与对象深度掌握 —— 从“零散变量“到“打包管理“
java·开发语言·python
\光辉岁月/4 小时前
2.java变量
java·开发语言·变量
Wang's Blog4 小时前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
专业程序开发源4 小时前
springboot生命故事书制作小程序65290-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·小程序·课程设计
AINative软件工程4 小时前
LLM Prompt Registry 工程实践:集中管理 Prompt,让模型调用不再散落在代码各处
后端·python·llm
IT_陈寒4 小时前
SpringBoot自动配置的坑我帮你踩过了
前端·人工智能·后端
代码山河4 小时前
Java的前世今生:从Oak语言到Java 23的发展史
java·学习·架构·教程·面向对象·项目
vx_Biye_Design4 小时前
springboot角色扮演服务平台65161-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·spring·课程设计
李游Leo4 小时前
HarmonyOS 7 QuickDock 闪控窗开发实录 02:floatView × floatingBall:形态切换、位置恢复与单一状态源【鸿蒙心迹】
java·华为·harmonyos
企业数字化笔记4 小时前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频