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

哪些网站可以做化妆品广告学网站建设怎么样

哪些网站可以做化妆品广告,学网站建设怎么样,湖南优化网站建设,天琥网页设计培训深入理解LongAdder、DoubleAdder的实现原理 本文主要通过LongAdder和DoubleAdder的源码#xff0c;讲述一下其实现原理。通过LongAdder和DoubleAdder的源码可知。两者都是继承了Striped64的类。下面我们将通过源码的形式讲述一下这三个类都做了哪些事情。 1: Striped64 ​ …深入理解LongAdder、DoubleAdder的实现原理 本文主要通过LongAdder和DoubleAdder的源码讲述一下其实现原理。通过LongAdder和DoubleAdder的源码可知。两者都是继承了Striped64的类。下面我们将通过源码的形式讲述一下这三个类都做了哪些事情。 1: Striped64 ​ 首先我们看下Striped64这个类做了哪些功能。 1.1 Cell类(内部类) sun.misc.Contended static final class Cell {volatile long value;Cell(long x) { value x; }final boolean cas(long cmp, long val) {return UNSAFE.compareAndSwapLong(this, valueOffset, cmp, val);}// Unsafe mechanicsprivate static final sun.misc.Unsafe UNSAFE;private static final long valueOffset;static {try {UNSAFE sun.misc.Unsafe.getUnsafe();Class? ak Cell.class;valueOffset UNSAFE.objectFieldOffset(ak.getDeclaredField(value));} catch (Exception e) {throw new Error(e);}} }1: sun.misc.Contended 注解作用 ​ 在前面的文章中我们讲到缓存行锁能够代替总线锁的唯一条件:变量已经在缓存行中。 问题1: 我们思考一个问题那一个数据可以分散在同一个缓存行中吗 ​ 答案是否定的。如果一个数据分散在一个缓存行中那么CPU加锁就没有作用了。那么 sun.misc.Contended 注解就是将该变量数据强制刷到不同的缓存行中。 问题2: 如果能够做到强制刷到不同的缓存行中? ​ 根据缓存行的长度变量不足长度的数据进行强制填充。将缓存行填充完整。 问题3: 如何填充 ​ 2: Cell类最终是为了解决什么问题 主要是为了 降低了CAS的范围。 如上图线程如果CAS操作一直不成功的时候就会导致CPU一直空转。那么我们是不是可以思考一下将int数据进行打散分成若干个值分别计算最好将值进行汇总。变成如下图形式: 这些CPU的竞争降低了很多降低了CAS的范围。采用的思想就是降低锁粒度提供并发性能。 2: Striped64类 abstract class Striped64 extends Number {/*** cell数组。当非空时size是2的幂*/transient volatile Cell[] cells;/*** 基础值当没有竞争的时候使用使用cas更新*/transient volatile long base;/*** cas操作base属性值*/final boolean casBase(long cmp, long val) {return UNSAFE.compareAndSwapLong(this, BASE, cmp, val);}// Unsafe mechanicsprivate static final sun.misc.Unsafe UNSAFE;private static final long BASE;private static final long CELLSBUSY;private static final long PROBE;static {try {UNSAFE sun.misc.Unsafe.getUnsafe();Class? sk Striped64.class;BASE UNSAFE.objectFieldOffset(sk.getDeclaredField(base));CELLSBUSY UNSAFE.objectFieldOffset(sk.getDeclaredField(cellsBusy));Class? tk Thread.class;PROBE UNSAFE.objectFieldOffset(tk.getDeclaredField(threadLocalRandomProbe));} catch (Exception e) {throw new Error(e);}} }2: LongAdder public class LongAdder extends Striped64 implements Serializable {/*** Adds the given value.** param x the value to add*/public void add(long x) {Cell[] as; long b, v; int m; Cell a;if ((as cells) ! null || !casBase(b base, b x)) {/*** 能够进入的两种情况* 1: 如果当前数组不为空,或者casBase不成功的时候也就是说存在竞争的情况下* 2: 数据为空casBas成功不存在竞争直接casBase*/boolean uncontended true; //是否竞争标识: 控制多个线程是否竞争同一个cellif (as null || (m as.length - 1) 0 ||(a as[getProbe() m]) null || !(uncontended a.cas(v a.value, v x)))//如果内部cell没有初始化退回到原来的cas // 如果cell没有初始化则对cell进行初始化。longAccumulate(x, null, uncontended);}}/** * 所有cell值进行汇总求和额外加上base*/public long sum() {Cell[] as cells; Cell a;long sum base;if (as ! null) {for (int i 0; i as.length; i) {if ((a as[i]) ! null)sum a.value;}}return sum;} }final void longAccumulate(long x, LongBinaryOperator fn,boolean wasUncontended) {int h;if ((h getProbe()) 0) {ThreadLocalRandom.current(); // force initializationh getProbe();wasUncontended true;}boolean collide false; // True if last slot nonemptyfor (;;) {Cell[] as; Cell a; int n; long v;// 如果cells数组不为null并且数组已经存在值if ((as cells) ! null (n as.length) 0) {// 当线程访问的下标没有初始化,则进行初始化if ((a as[(n - 1) h]) null) {if (cellsBusy 0) { // Try to attach new CellCell r new Cell(x); // Optimistically createif (cellsBusy 0 casCellsBusy()) {boolean created false;try { // Recheck under lockCell[] rs; int m, j;if ((rs cells) ! null (m rs.length) 0 rs[j (m - 1) h] null) {rs[j] r;created true;}} finally {cellsBusy 0;}if (created)break;continue; // Slot is now non-empty}}collide false;}//没有发生竞争设置成trueelse if (!wasUncontended) // CAS already known to failwasUncontended true; // Continue after rehash// 再次尝试一下是否能够自旋成功 else if (a.cas(v a.value, ((fn null) ? v x :fn.applyAsLong(v, x))))break;else if (n NCPU || cells ! as)collide false; // At max size or staleelse if (!collide)collide true;//继续找个cell进行自旋else if (cellsBusy 0 casCellsBusy()) {try {if (cells as) { //进行扩容Cell[] rs new Cell[n 1];for (int i 0; i n; i)rs[i] as[i];cells rs;}} finally {cellsBusy 0;}collide false;continue; // Retry with expanded table}h advanceProbe(h);} //casCellsBusy() 设置一个标志位,只允许一个线程进来else if (cellsBusy 0 cells as casCellsBusy()) {//cell数组为空需要初始化boolean init false;try { // Initialize tableif (cells as) {Cell[] rs new Cell[2];rs[h 1] new Cell(x);cells rs;init true;}} finally {cellsBusy 0; //释放锁}if (init)//如果初始化了则退出循环break;}else if (casBase(v base, ((fn null) ? v x : //默认累加fn.applyAsLong(v, x))))//只允许一个线程对cell数组 初始化。使用casBase 来控制多个线程并发初始化使用cas操作保证只有一个线程能够成功。所以只有一个线程能够创建cell数组其他线程失败。不能够让其他线程做无谓的自旋break; } }DoubleAdder类 通过阅读DoubleAdder的代码之后你会发现DoubleAdder和LongAdder的代码几乎一样所以两者的原理都是一样的这里就不对DoubleAdder 的代码一行行注释了大家自行阅读。 以上就是本次分享的主要的内容。
文章转载自:
http://www.morning.rlhgx.cn.gov.cn.rlhgx.cn
http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn
http://www.morning.lhldx.cn.gov.cn.lhldx.cn
http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn
http://www.morning.mwhqd.cn.gov.cn.mwhqd.cn
http://www.morning.wdlg.cn.gov.cn.wdlg.cn
http://www.morning.c7623.cn.gov.cn.c7623.cn
http://www.morning.sqhtg.cn.gov.cn.sqhtg.cn
http://www.morning.dwrbn.cn.gov.cn.dwrbn.cn
http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn
http://www.morning.xsklp.cn.gov.cn.xsklp.cn
http://www.morning.qlwfz.cn.gov.cn.qlwfz.cn
http://www.morning.bpwdc.cn.gov.cn.bpwdc.cn
http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn
http://www.morning.kjksn.cn.gov.cn.kjksn.cn
http://www.morning.jggr.cn.gov.cn.jggr.cn
http://www.morning.njqpg.cn.gov.cn.njqpg.cn
http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn
http://www.morning.dmchips.com.gov.cn.dmchips.com
http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn
http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn
http://www.morning.tznlz.cn.gov.cn.tznlz.cn
http://www.morning.rdkt.cn.gov.cn.rdkt.cn
http://www.morning.dljujia.com.gov.cn.dljujia.com
http://www.morning.qllcp.cn.gov.cn.qllcp.cn
http://www.morning.cfnht.cn.gov.cn.cfnht.cn
http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn
http://www.morning.jprrh.cn.gov.cn.jprrh.cn
http://www.morning.wrdpj.cn.gov.cn.wrdpj.cn
http://www.morning.qbdsx.cn.gov.cn.qbdsx.cn
http://www.morning.khxyx.cn.gov.cn.khxyx.cn
http://www.morning.dytqf.cn.gov.cn.dytqf.cn
http://www.morning.tnzwm.cn.gov.cn.tnzwm.cn
http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn
http://www.morning.ysckr.cn.gov.cn.ysckr.cn
http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn
http://www.morning.drgmr.cn.gov.cn.drgmr.cn
http://www.morning.tpnxr.cn.gov.cn.tpnxr.cn
http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn
http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn
http://www.morning.yxnfd.cn.gov.cn.yxnfd.cn
http://www.morning.cjwkf.cn.gov.cn.cjwkf.cn
http://www.morning.yckwt.cn.gov.cn.yckwt.cn
http://www.morning.tsqrc.cn.gov.cn.tsqrc.cn
http://www.morning.tdldh.cn.gov.cn.tdldh.cn
http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn
http://www.morning.3dcb8231.cn.gov.cn.3dcb8231.cn
http://www.morning.nmqdk.cn.gov.cn.nmqdk.cn
http://www.morning.rkfxc.cn.gov.cn.rkfxc.cn
http://www.morning.bwrbm.cn.gov.cn.bwrbm.cn
http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn
http://www.morning.wrtsm.cn.gov.cn.wrtsm.cn
http://www.morning.rfhwc.cn.gov.cn.rfhwc.cn
http://www.morning.iterlog.com.gov.cn.iterlog.com
http://www.morning.djxnw.cn.gov.cn.djxnw.cn
http://www.morning.wqcz.cn.gov.cn.wqcz.cn
http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn
http://www.morning.smhtg.cn.gov.cn.smhtg.cn
http://www.morning.mxmtt.cn.gov.cn.mxmtt.cn
http://www.morning.jwmws.cn.gov.cn.jwmws.cn
http://www.morning.jokesm.com.gov.cn.jokesm.com
http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn
http://www.morning.nxdqz.cn.gov.cn.nxdqz.cn
http://www.morning.fkyrk.cn.gov.cn.fkyrk.cn
http://www.morning.dthyq.cn.gov.cn.dthyq.cn
http://www.morning.ltfnl.cn.gov.cn.ltfnl.cn
http://www.morning.dthyq.cn.gov.cn.dthyq.cn
http://www.morning.bdqpl.cn.gov.cn.bdqpl.cn
http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn
http://www.morning.cxlys.cn.gov.cn.cxlys.cn
http://www.morning.zkqwk.cn.gov.cn.zkqwk.cn
http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn
http://www.morning.ckxd.cn.gov.cn.ckxd.cn
http://www.morning.nqpy.cn.gov.cn.nqpy.cn
http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn
http://www.morning.uytae.cn.gov.cn.uytae.cn
http://www.morning.ngcw.cn.gov.cn.ngcw.cn
http://www.morning.yfffg.cn.gov.cn.yfffg.cn
http://www.morning.kqgsn.cn.gov.cn.kqgsn.cn
http://www.morning.mfct.cn.gov.cn.mfct.cn
http://www.tj-hxxt.cn/news/269808.html

相关文章:

  • 做建材营销型网站安卓小项目源码免费网站
  • 网站未备案或已封禁北京形势紧张
  • 网站建设在哪里推广民权平台网站建设
  • 怎么样做网站赚钱吗淄博做网站公司有哪些
  • 山西省建设厅招标网站首页英文网站怎么做
  • 网站建设shundeit怎么登录微信小程序平台
  • 网站查询关键词排名软件游戏平台网站建设
  • 开发一个网站 要多久珠海pc网站建设
  • 注册网站免费阿里巴巴国际站特点
  • 做网站文件下载网页的网站建设
  • 深圳城乡和建设局网站企业手机网站建设案例
  • 电商设计素材网站推荐论坛怎样发帖推广
  • 网站建设包括哪些方面android开发菜鸟教程
  • 网站建设高端wordpress淘客响应式主题
  • 石家庄市新华区建设局网站夏津网站建设费用
  • 自建个网站怎么做快速建立平台网站开发网站模板设计
  • 网站建设的费用报价网站开发工程师面试问哪些问题
  • 个人网站建设多少钱免费的简历制作网站
  • 简单的网站建设合同书网站开发网站说明怎么写
  • 做技术支持的网站有单页面seo搜索引擎优化
  • 福田做网站优化乐云seo互联网公司网站
  • 哪些网站做夜场女孩多在线免费看1921完整版
  • 东莞建设年审网站人工投票平台app
  • 事业单位网站建设工作方案四川公共资源交易信息网
  • 网站建设合伙合同范本建筑企业wordpress主题
  • 安徽省途顺建设工程有限公司网站多用户电商平台
  • 温州网站设计方案北京软件公司名称大全
  • 蓬莱专业做网站公司什么是网站建设的建议
  • 网站宣传册wordpress 培训模板下载
  • 网站自己服务器wordpress标签随机调用