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

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

  1. 使用并发的常见场景为针对大数据量遍历处理,考虑性能,采用并发处理。这是CPU密集型任务场景,同时出现多个任务时,性能不见得最优。
  2. 并发也有开销,不建议无脑并发。并发后堆栈会丢失,不方便排查问题。
  3. 异步开发模式具有传染性,比如使用可回调 Future 后,如果想要避免阻塞问题,需要使用map、flatMap语义。折中的方法是参考结构化并发,在必要位置等待,获取结果后清理资源。
  4. 需要注意副作用,尽量不要使用副作用。尽量不要修改共享的内容,比如本地缓存。
  5. 使用线程安全类 + 原子方法, ConcurrentHashMap 和 HashMap 相比,性能差别不大,而且内存占用基本一致,很多情况下可以直接替换。灵活使用 merge、computeIfAbsent 等方法,比如需要择优的场景,不需要重复写写命令式的逻辑。
  6. 考虑单次加载实现
  7. ConcurentHashMap 高并发时,可能有阻塞等待同一个桶位的问题,必须指定初始大小。
  8. 考虑线程池阻塞队列消费速度,防止某些捣蛋线程。
  9. 考虑处理拒绝任务异常,设计 fallback 策略。
  10. 并发超时或者任务取消时很容易出现线程泄露。
  11. 监控并发收益。
  12. 监控阻塞线程,防止惊群效应。
相关推荐
卷福同学25 分钟前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端
严同学正在努力37 分钟前
从备份到恢复:我用 30 分钟恢复了误删的核心业务表
android·java·数据库·ai
Csvn1 小时前
📊 SQL 入门 Day 11:CASE 表达式:SQL 里的 if-else 魔法
后端·sql
QQ_21696290961 小时前
Spring Boot 养老院管理系统:从入住、护理到费用结算的全流程实现(源码可领)
java·spring boot·后端
cxoptics2 小时前
冰洲石分束器设计与应用
java
ck-joker2 小时前
M1 Pro跑LLM实测:Ollama+LangChain4j零成本本地大模型开发,比云端API快在哪?
java·语言模型
丙氨酸長鏈3 小时前
[Bukkit插件开发]手持发射器箭矢机枪 教学文档 面向Python/C#开发者入门Java与Bukkit API
java·python·c#
Nontee3 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
我是唐青枫3 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java·开发语言
自强的小白4 小时前
Docker命令
java·docker·容器