查看完整视频
评论可见

您需要在视频最下面评论,方可查看完整视频

积分观看

您支付积分,方可查看完整视频

{{user.role.value}}
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
专属视频

只允许以下等级用户查看该视频

升级
会员专享

深入Atomic底层实现原理

谈到原子性之前我讲到了SynchronizedReentrantLock、以及CAS ,今天深入讲Atomic的底层实现原理。

这些都是属于非常重要的内容,需要重点来掌握。

我先从Atomic的来源谈起,然后一步步深入源码,剖析底层实现原理。

隐藏内容,您需要满足以下条件方可查看
End

课后作业

隐藏内容,您需要满足以下条件方可查看
End
6:并发其它

ThreadLocal深度源码剖析

2020-8-6 17:58:30

6:并发其它

深入线程池(图文视频详解)

2020-8-4 16:52:12

2 条回复 A文章作者 M管理员
  1. sync:300:29 atomic:300:27
    sync:3000:236 atomic:3000:228
    sync:120000:8797 atomic:120000:8679
    sync:220000:15726 atomic:220000:15974
    sync:320000:23008 atomic:320000:22934
    线程少的时候,atomic弱优于synchronized, 随着并发增大,相差还是不明显,但在继续增大过程过,偶尔出现弱于synchronized情况出现。

    估计synchronized有自旋优化的原因,所以和atomic相差不明显,甚至偶尔出现优势。

    AtomicLong:50000:3945 LongAddr:50000:3895
    AtomicLong:100000:7519 LongAddr:100000:7425
    AtomicLong:100:10 LongAddr:100:12
    AtomicLong:500:46 LongAddr:500:43

    从数据看,LongAddr优于AtomicLong,简单看了下代码,他们本质技术都是基于cas,但是LongAddr用数组拆分了这个value值, 降低了cas更新失败的可能性。

  2. 当低并发时,Atomic效率优于synchronized
    当高并发时,synchronized效率优于Atomic
    synchronized重量级操作,是悲观锁;Atomic是乐观锁,基于volitile和CAS实现,当并发量大时,CAS失败的概率会增大,自旋次数增多,浪费cpu时间,效率会降低
    低并发时LongAdder和AtomicLong性能差不多,高并发时LongAdder更高效
    低并发环境下,LongAdder执行的是casBase操作类似于AtomicLong的cas操作;AtomicLong在高并发情况之下,CAS失败几率更高,重试次数更多,越多线程重试,CAS失败几率又越高,变成恶性循环,AtomicLong效率降低。LongAdder给出的解决方案是:减少并发,将单一value的更新压力分担到多个value中去,降低单个value的“热度”,分段更新。这样,线程数再多也会分担到多个value上去更新,只需要增加value就可以降低value的热度。

个人中心
今日签到
搜索