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

深入理解CAS

1、什么是CAS
CAS(Compare And Swap比较和交换),是非阻塞同步的实现原理,它是CPU硬件层面的一种指令,从CPU层面能保证“比较与交换”两个操作的原子性。CAS操作包括三个参数:内存值(内存地址值)V、预期值E、新值N,当CAS指令执行时,当且仅当预期值和内存值相同时,才更新内存值为新值,否则就不执行更新。
2、CAS的使用
CAS在java.util.concurrent.atomic类、Java AQS、CurrentHashMap等是实现上有非常广泛的应用
3、CAS缺陷:

  • 自旋CAS长时间不成功,则会给CPU带来非常大的开销
  • 只能保证一个共享变量原子操作
  • ABA问题
    (数据库 乐观锁方案,每次修改一次数据,版本就会累加;Java提供了相应的原子引用类AtomicStampedReference)
    4、LongAdder、DoubleAdder
    AtomicLong利用了底层的CAS操作来提供并发性。在并发量低的情况下,线程冲突的概率小,自旋的次数不会太多。但是在高并发场景下,可能会出现大量失败并不断自旋的情况。
    这就是引入LongAdder的初衷——解决高并发场景下AtomicInteger,AtomicLong的自旋瓶颈问题。
    LongAdder原理
    AtomicLong中有个内部变量value保存着实际的long值,所有操作都是围绕该变量进行。也就是说高并发环境下,value变量其实是一个热点。LongAdder的基本思路就是分散热点,将value的值分散到一个数组中,不同线程会命中到数组的不同槽中,各个线程只对自己槽中的那个值进行CAS操作,这样热点就分散了,冲突的概率就很小很多。如果要获取真正的long值,只要将各个槽中的变量累加返回。
    LongAdder的内部结构
    LongAdder内部有一个base变量,一个Cell[]数组
    base变量:非竞态条件下,直接累加到该变量上
    Cell[]数组:竞态条件下,累加各个线程自己的槽cell[i]中
    LongAdder的使用场景
    纯累加且高并发场景下使用LongAdder,经常被用作高并发计数器,统计指标(qps,流量)
    低竞争条件下反而AtomicLong性能更好
http://www.dtcms.com/a/446408.html

相关文章:

  • 响应式网站开发方法系统首页设计
  • 华清远见25072班C++学习假期10.5作业
  • 【系统分析师】2024年下半年真题:综合知识-答案及详解(回忆版)
  • 网站代码的重点内容是什么wordpress 批量建站
  • 密码学系列 - 零知识证明(ZKP) - NTT运算
  • 商城网站建设明细自己弄个网站怎么赚钱
  • Android 系统下 getevent 工具
  • 学院网站建设方案软件开发自学入门教程
  • Deflate在线解压工具(支持无zlib头)
  • win7下winlogon.exe调试记录
  • 网站 做 app开发wordpress插件开发
  • 昆明做网站哪家便宜怎么让付费网站免费
  • 《C++进阶之C++11》【智能指针】(下)
  • 桐城网站定制软件开发的学校有哪些
  • 海南省工程建设定额网站简单网站首页
  • K230基础-特征检测
  • 宁波网站建设内容深圳网站开发建设服务公司
  • CTFHub 信息泄露通关笔记11:HG泄露(4种方法)
  • 网站采用什么方法建设wordpress获取文章信息
  • 上海网站建设公司招聘wordpress用手机写博客
  • 网站为什么要更新wordpress保护插件
  • Maixcam学习笔记-寻址色块和直线
  • 您正在 GUI 下运行 Fcitx,但是 fcitx-config-qt 未被找到。该软件包名称通常为 fcitx5-configtool。现在将打开配置目录
  • 速通web全栈开发
  • 网站建设虚拟服务器赣州新闻最新消息
  • 33.搜索旋转排序数组;153.寻找旋转排序数组中的最小值 4. 寻找两个正序数组的中位数
  • 4准则下,2可加模糊测度满足单调性和有界性约束。假设没有任何其他先验信息,基于Marichal熵最大的目标,求解莫比乌斯参数。
  • 果洛州wap网站建设公司wordpress用哪个国外空间
  • 【IMX6ULL驱动学习】INPUT子系统
  • 上海做网站建设公司代理注册公司流程和费用