LongAdder Cmap

2019-05-22  本文已影响0人  辰晞

LongAdder
https://www.bookstack.cn/read/Java_Basic_Introduction/README.md vip了,基础都在这里。
https://zhuanlan.zhihu.com/p/65520633 场景就是写多
https://blog.xiaoxiaomo.com/2019/03/15/Java-ConcurrentHashMap%E7%AC%94%E8%AE%B0%E6%95%B4%E7%90%86/ 看到简单 不好明了的。

图片搜索
http://www.jasongj.com/java/concurrenthashmap/
https://www.iteye.com/topic/1103980
https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/index.html ibm出品 必探究到本质
都强调一个动态变化。
有两个方法,一个是分段,一个是cow。
unsafe是什么,就好比是malloc,free C++中的,完成一些非法操作使用
直接操作内存的。 还有就是堆外和cas这两点。
https://zhuanlan.zhihu.com/tt-yuan 这个专栏不错。还有一个假的共享。
NM,读zhss的都感觉很简单,看code都感觉这么吃力呢?
思路和落实有很大差距呀。
https://sulangsss.github.io/2019/02/01/Java/Advance/AtomicLong%E5%92%8CLongAddr/ 把握关键点 这里就足够了
不需要到code级别,还是原理的东西。
场景都是计数器好像,一直累加base,不行都设置分段,都累加去吧,最后 合并base+各个分段。
https://sulangsss.github.io/2019/02/01/Java/Advance/AtomicLong%E5%92%8CLongAddr/ 这里即可 VIP 原理 不要看code。
几个QA 瞬时MB呀
初始情况,LongAdder与AtomicLong是相同的,
只有在CAS失败时,才会将value拆分成cell,
每失败一次,都会增加cell的数量,这样在低并发时,同样高效,
在高并发时,这种“自适应”的处理方式,达到一定cell数量后,CAS将不会失败,效率大大提高。
NM,小小的思想 一草一木皆是世界呀。
http://www.importnew.com/21358.html 参考这里的简单描述

https://zhuanlan.zhihu.com/p/38288416 继续参考
然后依次进行2的幂等次的扩充,直到小于等于最接近 CPU核数的2的幂等(四核时为16)
维护了一个自旋锁(通过UnSafe的CAS),用于操作base和Cell时的并发控制

何时初始化cell数组? 失败的时候。
当前线程如何选择cell中的元素进行访问? 随机算法
如果保证cell中元素更新的线程安全? 使用unsafe的cas
cell数组何时进行扩容,cell元素个数可以无限扩张? 接近 2的cpu核数次方即可。

算是完结了一个系统。

终结了
https://www.jianshu.com/p/487d00afe6ca
https://juejin.im/post/5b00160151882565bd2582e0
https://www.cnblogs.com/lfs2640666960/p/9621461.html
https://www.cnblogs.com/yangming1996/p/8031199.html
并发扩容策略
https://www.wandouip.com/t5i204093/
大图

这个很重要,因为这个是一把钥匙 串联所有技能的一个点子。
NM,看都看不懂,这里比较难呀。
http://www.importnew.com/28263.html 系统性 说原理即可哈
这感觉,con current hash map 是1616呀 并发级别16
很系统了,自己看不懂这个没有办法。

入门级别
https://blog.csdn.net/universsky2015/article/details/77965825
读锁完全去除,哪怕在增删改的时候,为什么还不加锁,保证一致性的。
NM,这里想不通的,他的修改的时候,怎么就保证了get的数据一致性?
其实是保证不了的。 这里说的简单一些。

这个必须一句话来明了,的确是一个差异化的地方。
https://www.jianshu.com/p/f6730d5784ad 占小狼 足矣
https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/ 足够了
https://blog.csdn.net/qq_27007251/article/details/71403647 没有死循环了,上一篇说的不对
还有丢失数据的问题,也是一个差一点 也要BB。
明确说了,没有,就是顺序改变了。
自旋获取,到一定的次数 阻塞获取 升级
:其中抛弃了原有的 Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。
其实是,segment可以用数组的首节点替代了。是这样的。
自旋锁到互斥锁的升级 代码写的666
http://www.jasongj.com/java/concurrenthashmap/ ms足够的一篇了。 VIP 终结了。

上一篇下一篇

猜你喜欢

热点阅读