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

现在什么网站比较火做推广伊利集团的网站建设水平评价

现在什么网站比较火做推广,伊利集团的网站建设水平评价,wordpress在哪登陆,自己怎么开网店的步骤CAS(Compare-And-Swap)详解 基本概念 CAS 是一种硬件级别的原子操作,它用来比较内存中的某个值是否为预期值,如果是,则更新为新值,否则不做修改。 工作原理 比较(Compare)&#…

CAS(Compare-And-Swap)详解

基本概念

CAS 是一种硬件级别的原子操作,它用来比较内存中的某个值是否为预期值,如果是,则更新为新值,否则不做修改。

工作原理

  • 比较(Compare):CAS 会检查内存中的某个值是否与预期值相等。
  • 交换(Swap):如果相等,则将内存中的值更新为新值。
  • 失败重试:如果不相等,说明有其他线程已经修改了该值,CAS 操作失败,一般会利用重试,直到成功。

CAS的优缺点

优点:

  • 无锁并发:CAS 操作不使用锁,因此不会导致线程阻塞,提高了系统的并发性和性能。
  • 原子性:CAS 操作是原子的,保证了线程安全。

缺点:

  • ABA 问题:CAS 操作中,如果一个变量值从 A 变成 B,又变回 A,CAS 无法检测到这种变化,可能导致错误。
  • 自旋开销:CAS 操作通常通过自旋实现,可能导致 CPU 资源浪费,尤其在高并发情况下。
  • 单变量限制:CAS 操作仅适用于单个变量的更新,不适用于涉及多个变量的复杂操作。

ABA问题

ABA 问题是指当变量值从 A 变为 B 再变回 A 时,CAS 操作无法检测到这种变化。解决 ABA 问题的一种常见方法是引入版本号或时间戳,每次更新变量时同时更新版本号,从而检测到变量的变化。

Java 中的 AtomicStampedReference 就提供了版本号解决方案,它内部提供了一个 Pair 封装了引用和版本号,利用 volatile 保证了可见性。image-20250517173840620

compareAndSet()方法分析image-20250517174419397

代码示例

使用 AtomicStampedReference 实现带有版本号控制的 CAS 操作,用于解决并发中的 ABA 问题。

public class SimpleCAS {private final AtomicStampedReference<Integer> atomicReference = new AtomicStampedReference<>(10, 0);/*** 自定义 CAS 方法,带版本控制,解决 ABA 问题*/public boolean cas(int expectedValue, int expectedStamp, int newValue) {return atomicReference.compareAndSet(expectedValue, newValue, expectedStamp, expectedStamp + 1);}public static void main(String[] args) {SimpleCAS simpleCAS = new SimpleCAS();// A 读取值和版本号int[] stampHolder = new int[1];int valueA = simpleCAS.atomicReference.get(stampHolder);int stampA = stampHolder[0];System.out.println("A初始读取: 值=" + valueA + ", 版本号=" + stampA);// B 做 ABA 操作boolean changed = simpleCAS.cas(10, stampA, 30);if (changed) System.out.println("B: 将 10 更新为 30");int[] stampHolder2 = new int[1];simpleCAS.atomicReference.get(stampHolder2);int stampB = stampHolder2[0];changed = simpleCAS.cas(30, stampB, 10);if (changed) System.out.println("B: 将 30 改回 10");int[] stampHolder3 = new int[1];int valueC = simpleCAS.atomicReference.get(stampHolder3);int stampC = stampHolder3[0];System.out.println("ABA后: 值=" + valueC + ", 版本号=" + stampC);System.out.println("---------------");// 线程 A 尝试用旧的 stamp 做 CASboolean success = simpleCAS.cas(10, stampA, 30);System.out.println("A用旧stamp尝试CAS (ABA后): " + (success ? "成功" : "失败"));System.out.println("最终值: " + simpleCAS.atomicReference.get(new int[1]));}
}

运行示例image-20250517175133883

可以看到: B在将10更新为30, 又从30改回10之后, A在CAS的时候就失败了, 可以看到有效防止了ABA问题。

CAS 在 Java 中的实现

在 Java 中,CAS 操作由 sun.misc.Unsafe 类提供,但该类是内部类,不推荐直接使用。

在 Java 中,可以使用并发包中 Atomic 类(如 AtomicInteger、AtomicLong 等),这些类封装了 CAS 操作,提供了线程安全的原子操作。image-20250517181121693image-20250517181153072

可以看到最终调用的还是带有native的本地方法, 通过 JNI(Java Native Interface)调用这些底层的硬件指令来实现 CAS 操作,从而确保操作的原子性。

与传统锁机制的对比

锁机制
  • 优点 :实现简单直观,在复杂业务场景下可以方便地构建复杂的同步逻辑,对于长时间持有资源的操作有一定优势(能保证线程获取到资源后可以完整地执行相关逻辑)。
  • 缺点 :容易导致线程阻塞和上下文切换开销,死锁风险,在高并发频繁竞争的场景下性能可能较差。
CAS机制
  • 优点 :性能在低竞争场景下很高,避免死锁,适合实现非阻塞算法。
  • 缺点 :存在 ABA 问题、循环开销、只能保证单个变量原子操作等问题,在某些复杂场景下需要结合其他技术来弥补不足。

CAS总线风暴

在多核处理器中,所有处理器核心共享一条总线并与主内存进行数据交互。当一个处理器核心对共享变量执行 CAS 操作时,需要通过总线广播通知其他核心更新其高速缓存中的该变量值,以保证缓存一致性,这种通信称为“缓存一致性流量”。而短时间内大量的 CAS 操作会导致缓存一致性流量激增,超出总线的通信能力上限,造成总线拥塞,即总线风暴。ad3bfbfdc0c7e561e6357fe9be37bae

而通过总线来回通信称为缓存一致性流量。因为都需要通过总线通信,如果这个流量过大,总线就会成为瓶颈,导致本地缓存更新延迟。

如果 CAS 修改同一个变量并发很高,就会导致总线风暴。这也是 CAS 高并发下的一个性能瓶颈。


文章转载自:

http://onX3M8cK.xkzmz.cn
http://9XJVBzbj.xkzmz.cn
http://ocYA7sjD.xkzmz.cn
http://DSJdG7Vy.xkzmz.cn
http://TrIOfXEQ.xkzmz.cn
http://poAS6PCr.xkzmz.cn
http://mWkL0ecp.xkzmz.cn
http://HQKqYR1D.xkzmz.cn
http://YjNS8gdK.xkzmz.cn
http://bLC1kBRV.xkzmz.cn
http://ulmHR0ol.xkzmz.cn
http://ZfeX1RdW.xkzmz.cn
http://OuT8a2Ul.xkzmz.cn
http://C4A1Csbc.xkzmz.cn
http://K0ycefMh.xkzmz.cn
http://uGZFC7lg.xkzmz.cn
http://0SaqZpNh.xkzmz.cn
http://Zwn6xgsN.xkzmz.cn
http://Uhk5cJoF.xkzmz.cn
http://lnuQSlgU.xkzmz.cn
http://8cyTbTvQ.xkzmz.cn
http://n2CARO5s.xkzmz.cn
http://8rkynVzR.xkzmz.cn
http://Qpenh3Yt.xkzmz.cn
http://8v6biIJR.xkzmz.cn
http://E49CC6vE.xkzmz.cn
http://4gvwnu2H.xkzmz.cn
http://51HEggjC.xkzmz.cn
http://bx3kaXwU.xkzmz.cn
http://N5lMhOyX.xkzmz.cn
http://www.dtcms.com/wzjs/632467.html

相关文章:

  • 大同哪有做网站的优化手机网站
  • 网站开发培训哪里好重庆网站设计开发培训学校
  • 系统门户网站建设详细功能网络商城运营
  • 产品推广网站哪个好网站建设汽车后市场解决方案
  • vr看房制作软件seo网站建设厦门
  • 网站访问量的单位中国航天空间站最新消息
  • 哈尔滨建设网站自己做网站要学前端和后端
  • 江苏 网站备案互联网营销师有什么用
  • 域名访问不了织梦网站一个门户网站多少钱
  • 济南手机网站建设专业定制天津塘沽爆炸案处理结果
  • 做外贸 上国外网站网站访问慢的原因
  • 番禺区住房和建设局物业网站最全的wordpress 中文手册
  • 推广型网站免费建设绍兴专业网站建设公司
  • 博学网站建设公司Wordpress 对比wagtail
  • 2012r2网站建设平面设计培训班教程
  • 个人备案网站名称站酷网页
  • 欧美网站模版wordpress数据库导出
  • 有关网站建设的外文参考文献在服务器做网站
  • 精品建站网站建设通讯稿
  • 科技成果转化网站建设方案国外ip代理
  • 深圳外贸网站搭建山东网站定制策划
  • 购买网站平台如何做分录中国铁建网站
  • 网站设计建设 公司加强旅游网站建设
  • 商场网站开发教程网站设计板块
  • 出口网站有哪些怎么做国际网站首页
  • 备案的网站有什么好处网站搭建方案模板
  • 成都山而网站建设公司湛江网站开发
  • 网站 百度地图网站开发最好的语言
  • 为学校网站建设百度外推排名
  • 网站彩票怎么做做3d效果图有什么好网站