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

并发编程第一节

⚙️ 一、高并发核心概念

  1. 高并发定义
    指系统在单位时间内能同时处理大量请求的能力,通常伴随瞬时流量爆发(如双十一秒杀、12306抢票)。关键指标包括:

    • QPS(每秒查询数):衡量服务端处理能力。
    • 响应时间:请求发出到收到响应的耗时(如200ms为良好标准)。
    • 吞吐量:单位时间成功处理的请求量。
  2. 典型高并发场景

    • 电商促销:双十一瞬时下单压力(订单提交、库存扣减)。
    • 金融交易:股票交易平台开盘时的集中交易请求。
    • 社交热点:微博热搜导致海量用户同时刷新评论。
    • 直播互动:百万级用户实时弹幕和礼物消息。

⚠️ 二、高并发下的数据不一致问题

当多线程同时读写共享数据时,若缺乏同步机制,会导致:

  1. 原子性破坏
    • 问题:复合操作(如“读取-修改-写入”)被线程切换打断。
    • 示例:两个线程同时读取库存为10,各扣减1后都写入9,实际应剩8。
  2. 可见性问题
    • 原因:线程修改数据后未及时刷回主存,其他线程读取旧值(CPU缓存未同步)。
  3. 有序性问题
    • 指令重排序:编译器/CPU优化可能改变代码执行顺序,导致意外结果。

案例:未加锁的HashMap并发put可能引发链表成环(JDK1.7)或数据覆盖。


🔧 三、关键术语解析

  1. 多线程扩容

    • 定义:多个线程协作完成数据迁移(如ConcurrentHashMap扩容时)。
    • 流程
      • 线程A触发扩容,通过transferIndex分配迁移区间(如负责桶16-31)。
      • 线程B访问正在迁移的桶时,会协助迁移(通过ForwardingNode标识)。
    • 优势:避免单线程迁移阻塞请求,提升扩容效率。
  2. 哈希冲突

    • 定义:不同Key经哈希函数计算后得到相同桶地址(如Key1和Key2均映射到数组索引5)。
    • 解决方案
      • 链表法:冲突键值对组成链表(JDK8前)。
      • 红黑树:链表长度≥8时转为树,查询复杂度从O(n)降至O(log n)。
  3. 细粒度(Fine-Grained)

    • 含义:将锁的粒度缩小到最小单位(如ConcurrentHashMap中锁单个桶而非整个表)。
    • 目的:减少线程竞争,提高并发度。

🛡️ 四、ConcurrentHashMap的原子性实现

ConcurrentHashMap通过以下机制保证原子性操作:

  1. CAS(Compare And Swap)

    • 原理:若变量当前值等于预期值,则更新为新值;否则重试或放弃。
    • 应用:初始化数组、更新桶头节点等无锁操作。
    • 示例put时若桶为空,直接用CAS写入新节点,失败则重试。
  2. synchronized锁细化

    • 锁对象<
http://www.dtcms.com/a/271731.html

相关文章:

  • 【WEB】Polar靶场 Day7 详细笔记
  • 深度学习模型表征提取全解析
  • 【PyTorch】PyTorch中数据准备工作(AI生成)
  • 内置函数(Python)
  • 树莓派免密登录(vs code/cursor)
  • EFK/ELK9.0.3 windows搭建
  • 【DB2】load报错SQL3501W、SQL3109N、SQL2036N
  • 【算法训练营Day10】栈与队列part2
  • SpringBoot mybatis
  • Idea如何解决包冲突
  • P8818 [CSP-S 2022] 策略游戏
  • 【自动驾驶】经典LSS算法解析——深度估计
  • 自动驾驶决策与规划
  • Git基本操作1
  • 【C++】第四章—— 函数重载 Function Overloading 笔记
  • 2、Unity插件整合
  • 智慧物流管理:动作识别与包装检测的协同突破
  • 射频信号(大宽高比)时频图目标检测anchors配置
  • SpringBoot实现MCP
  • 【Linux网络编程】Socket - TCP
  • 【通识】NodeJS基础
  • LLaMA 学习笔记
  • Java 多态详解:从原理到实战,深入理解面向对象编程的核心特性
  • C#基础篇(09)结构体(struct)与类(class)的详细区别
  • Vue响应式原理三:响应式依赖收集-类
  • 大模型的下半场:从工具到智能体的产业变革与2025突围之路
  • AI大模型:(二)4.2 文生图训练实践-真人写实生成
  • 8.2 文档预处理模块(二)
  • 学习笔记(31):matplotlib绘制简单图表-直方图
  • UNet改进(19):基于残差注意力模块Residual Attention的高效分割网络设计