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

并发编程第一节

⚙️ 一、高并发核心概念

  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.xdnf.cn/news/14903.html

相关文章:

  • 首批 | 云轴科技ZStack加入施耐德电气技术本地化创新生态
  • Caffeine的tokenCache与Spring的CaffeineCacheManager缓存区别
  • 一文读懂动态规划:多种经典问题和思路
  • VScode SSH远程连接Ubuntu(通过SSH密钥对的方式)
  • 深度学习遇到的问题
  • C++如何进行性能优化?
  • qt绘制饼状图并实现点击即放大点击部分
  • 前端接收流式数据demo,并用markdown解析数据,包括EventSource和fetch两种方式
  • 前端交互自定义封装类:“双回调自定义信息弹窗”
  • 香港维尔利健康科技集团AI健康云平台通过国际信息安全认证,打造全球健康数据合规新标杆
  • Transformer-BiGRU、Transformer、CNN-BiGRU、BiGRU、CNN五模型回归预测对比,Matlab代码实现
  • Ollama+OpenWebUI 0.42+0.3.35 最新版一键安装教程,解决手动更新失败问题
  • 传输层协议TCP、UDP
  • [NOIP][C++]洛谷P1376 [USACO05MAR] Yogurt factory 机器工厂
  • 实战Linux进程状态观察:R、S、D、T、Z状态详解与实验模拟
  • 智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
  • 自动驾驶感知系统
  • 爬虫-request处理POST
  • 当DMA想“越狱”:IOMMU怎么硬核拦截?
  • c语言学习_函数递归
  • 深度学习-多分类
  • Linux网络:UDP socket创建流程与简单通信
  • AWS OpenSearch Dev Tools使用
  • FastAPI Docker环境管理脚本使用指南
  • 人体坐姿检测系统开发实战(YOLOv8+PyTorch+可视化)
  • 微服务集成snail-job分布式定时任务系统实践
  • 向量与向量组的线性相关性 线性代数
  • Spring Boot + Easy Excel 自定义复杂样式导入导出
  • [ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
  • 香港站群服务器价格怎么样?