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

邢台网站建设服务长沙营销网站建设公司

邢台网站建设服务,长沙营销网站建设公司,柳州城乡建设管理局网站,垂直型跨境电商平台一、什么是CAS机制#xff08;compare and swap#xff09; 1.概述 CAS的全称为Compare-And-Swap#xff0c;直译就是对比交换。是一条CPU的原子指令#xff0c;其作用是让CPU先进行比较两个值是否相等#xff0c;然后原子地更新某个位置的值。经过调查发现#xff0c;…一、什么是CAS机制compare and swap 1.概述 CAS的全称为Compare-And-Swap直译就是对比交换。是一条CPU的原子指令其作用是让CPU先进行比较两个值是否相等然后原子地更新某个位置的值。经过调查发现其实现方式是基于硬件平台的汇编指令就是说CAS是靠硬件实现的JVM只是封装了汇编调用那些AtomicInteger类便是使用了这些封装后的接口。 简单解释CAS操作需要输入两个数值一个旧值(期望操作前的值)和一个新值在操作期间先比较下在旧值有没有发生变化如果没有发生变化才交换成新值发生了变化则不交换。 2.CAS算法的作用 解决多线程条件下使用锁造成性能损耗问题的算法保证了原子性这个原子操作是由CPU来完成的 3.CAS的原理 CAS算法有三个操作数通过内存中的值V、预期原始值A)、修改后的新值B。 1如果内存中的值和预期原始值相等 就将修改后的新值保存到内存中。 2如果内存中的值和预期原始值不相等说明共享数据已经被修改放弃已经所做的操作然后重新执行刚才的操作直到重试成功。 注意 1预期原始值A)是从偏移位置读取到三级缓存中让CPU处理的值修改后的新值是预期原始值经CPU处理暂时存储在CPU的三级缓存中的值而内存指定偏移位置中的原始值。 2比较从指定偏移位置读取到缓存的值与指定内存偏移位置的值是否相等如果相等则修改指定内存偏移位置的值这个操作是操作系统底层汇编的一个原子指令实现的保证了原子性。 JVM中CAS是通过UnSafe类来调用操作系统底层的CAS指令实现。CAS基于乐观锁思想来设计的其不会引发阻塞synchronize会导致阻塞。 import java.util.concurrent.atomic.AtomicInteger;public class CASDemo {public static void main(String[] args) {AtomicInteger atomicInteger new AtomicInteger(2023);//期望时5如果是5则改成2022System.out.println(atomicInteger.compareAndSet(2023, 2022) \t atomicInteger.get());System.out.println(atomicInteger.compareAndSet(2023, 2022) \t atomicInteger.get());} } 结果 true 2022 false 2022二、CAS和syncronized的比较 CAS线程不会阻塞线程一致自旋syncronized会阻塞线程会进行线程的上下文切换会由用户态切换到内核态切换前需要保存用户态的上下文而内核态恢复到用户态又需要恢复保存的上下文非常消耗资源。 三、CAS的缺点 1ABA问题 如果一个线程t1正修改共享变量的值A但还没修改此时另一个线程t2获取到CPU时间片将共享变量的值A修改为B然后又修改为A此时线程t1检查发现共享变量的值没有发生变化但是实际上却变化了。 解决办法 使用版本号在变量前面追加上版本号每次变量更新的时候把版本号加1那么ABA 就会变成1A-2B-3A。从Java1.5开始JUC包里提供了一个类AtomicStampedReference来解决ABA问题。AtomicStampedReference类的compareAndSet方法作用是首先检查当前引用是否等于预期引用并且当前版本号是否等于预期版本号如果全部相等则以原子方式将该引用和该标志的值设置为给定的更新值。 2CAS频繁失败导致CPU开销大 循环时间长开销会比较大自旋重试时间会给CPU带来非常大的执行开销 3只能支持一个变量的原子操作不能保证整个代码块的原子操作 只能保证一个共享变量的原子操作不能保证同时对多个变量的原子性操作 解决办法 从Java1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性你可以把多个变量放在一个对象里来进行CAS操作 四、CAS使用注意事项 1CAS需要和volatile配合使用 CAS只能保证变量的原子性不能保证变量的内存可见性。CAS获取共享变量的值时需要和volatile配合使用来保证共享变量的可见性 2CAS适用于并发量不高、多核CPU的情况 CPU多核情况下可以同时执行如果不合适就失败。而并发量过高会导致自旋重试耗费大量的CPU资源
http://www.dnsts.com.cn/news/165768.html

相关文章:

  • 深圳万户网络科技有限公司seo网站设计招聘
  • 商用高端网站设计新感觉建站一周内重大新闻事件10条
  • 金华建设局政务网站如何做亚马逊备案的网站
  • 广西住房和城乡建设厅网站首页做三个月网站 广告收入
  • 上海市 建设执业资格注册中心网站网页设计制作教程题库
  • 陕西省交通集团建设网站免费建站
  • 公司网站开发软件做网批有专门的网站吗?
  • 上海市建设工程咨询行业协会seo基础培训教程
  • 企业网站开发标准网站seo链接购买
  • 江宁网站建设报价不花钱怎么做网站运营
  • 怎么做能上谷歌网站什么是企业
  • 网站仿制教程创新创业项目计划书
  • 九江 网站建设网站设计由哪个部门做
  • 蓝色风格企业网站模板游戏在线玩免费免登录
  • 海外手表网站学做蛋糕的网站
  • 商城网站做推广方案可以为自己的小说建设网站
  • 免费看电视剧网站2020可以做彩字的网站
  • 哪些网站可以做详情页宠物之家网站开发
  • 怎么建投票网站建设网站的发布与推广
  • 深圳网站建设培训哪家好wordpress微信公众号关注登陆
  • 做图软件下载官方网站学ui学费大概多少钱
  • 网站开发流行cnc是什么意思
  • 江油网站制作怎么做网页中不显示项目符号
  • 网站开发技术概述广州网站建设全包
  • 昆山制造网站的地方空间网站购买
  • 宁波建站价格wordpress如何更新临时域名
  • 织梦网站导航如何删除微信h5网站模板下载
  • 深圳外贸建站及推广成都网站建设网站制作
  • 建设银行手机短信网站怎么开通公司部门祝福语
  • 郑州网站开发yipinpai商业网站建设设计公司