00:00
好,接下来第一个突破口走起,先看一下爱的。它1234566个红框框,这段代码写的非常的精妙,既有判断又有函数,两者相辅相成,几乎以这么一小段,从85。到90 30行不到,搞定了很多复杂的功能,有六步来帮助大家进行判断和检索。来,同学们回到这儿,先看看它上面的定义,就是这排啊。宿主。单元格数组as引用表示这引用引用数组,那B和V,这个B表示获取的被子值,Value表示期望值,什么意思呢?这个B就是我们STRIP64那个类里面的long base,然后这个就是B对应的。那么来同学们请看我们64这是不是有个long base value?没问题吧,那么搁到这它也会产生竞争,那么就是我们的期望值,看看变没变来,M表示C数组的长度,A表示当前线程命中的cell单元格O吧,那么说穿了啊,我们大家都清楚,一开始如果是并发度不高的话,那么就是一个被子值啊。
01:17
好,那假设现在全在他这儿自学烦了。大规模的这个系统性能下降了,马上按照它内部的算法开始进行分散,热点要扩容,那么。C0,那么这个时候。234没问题吧,那么现在是不是就是贝斯加这么cel数组好了,那么大致它就是这么一个理论,那么走起,我们先来看看我们的圆码。第一步,我们折腾。来吧。这个数组as就等于C,那么这个sales是什么?前面我们强调过,这个是不是64位?这个类里面定义Excel数组刚开始默认支持嘛,是不是那啊那么所以说过来。
02:02
这个就是这样速度。等不等于none等于none none不等于none true还是副,当然是,是吗?副词OK,因为none就要等于none,没问题,这个force过,那么下面由于它是货,我们继续请看CAS的base,那么答案一看这个名字也知道是不是对这我们的这个B。Base这个值,那么哪来这个base啊,就是前面刚才所说的,也就是我们这个long base啊,也是我们这抓着图的这个long base,对吧,基本这个值啊,也就是咱们这的这个好了,那接下来呢,我们干嘛呢?对它进行CS啊,那么来点开它CS啊,底层是什么?对base这个field的做一个CS啊,说穿了就是一个什么比较并交换,这些我们都说过了,好过了这。B就等于B,那么在这块那么相当于是什么,它呢,就是一个比较值啊几零,那么现在如果说第一个线程进来啊,我们这儿就是贝斯类一个都没有跟我抢吧,对吧,现在都是空弦嘛,那么就是我们这儿的这个X前面说过了,就这个一,那么就是零加一,那么此时告诉我CAS操作乘没乘高。
03:16
成功了,那么成功了以后,我们这个CS操作是不是会把我们的这个零改为我们的希望值变成一,OK,那么来。接下来我们就会认为这个易乘高怎么着返回错,然后前面加了个取法,整体而言是不是就false啊,那么相当于说没有数组,这个是负首次进来,这个做了一次以后,从这默认的零变成了一,这波没问题吧,这个贝斯现在就是1OK成功,那么成功以后怎么着提出这个if本次结束相当于说只有一个线程的时候,那么这一波没问题。好的。那接下来我们来看完了以后啊,条件递增,我们来逐步的解析,那么慢慢的。
04:04
线程并发的压力越来越大,只要这一段还能维持啊,那么相当于说第并发没竞争的时候,我们就在被CSCSCS啊,线程少的话好说,那么线程多了是不是慢慢的就要扩容啊,那么怎么来的呢?我们的第一步完活,第二步过来,随着我们的压力上升了,那么现在C要素组。过到这儿有没有没有呢,我们还没有新建这个数组呢。不等于钠。我操。再进来CS还是这个B,那么现在是一对吧,那么假设我再加一个是一,一加一等于二,如果还是D并发的话,那么OK,这块是错取法完成,但是架不住在这块越来越多了。那么越来越多的前提下,我们的程序就变成了这样,那么我们刚刚开始啊。
05:02
搁到这儿。那么越来越多了,受不了了。他CS对于这个贝斯。得了一个什么。False,现在我CAS对贝斯的前占出现失败,False在取法是不是true啊,True的话就进来了,好,那么同学们请看进入到我们的什么?If里面了,这个UN contained的代表什么?没有冲突,哎,它来决定我们这个cel数组扩不扩容,好,那么默认没有冲突是错,好,此时我们过来if as就是这个cel数组,因为由于啊,我们这个被词类。抢夺竞争太激烈了,已经不够用了,那么现在我们要进入我们的第二步,要准备新建C数组扩容,所以说来到我们的第二步,默认有没有冲突啊?默认没按contented是没有冲突,怎么着是错,确实没有冲突,那么这个时候as就是Excel数组单元格数组等不等于呢?当然等于了,那么这个时候我们呢,就是什么处。
06:05
处了以后该不该进来,当然应该进来了,那么进来这些都是货嘛,只要有一个条件成了,我们呢,直接挂到这儿,那么来了搁到这儿了以后啊,我们后续再讲这些细节,它到底是什么,那么接下来我们呢,就要来看一下,在这块你看for相当于写了个Y处,也就是底子,它里面的代码也就是一个大的。While处的这么一个永远的一个循环,当然它有退出机制啊,那巴拉巴拉巴拉。完了以后这大段后续我们都要进行详细的讲解,那么大家先不要管在这儿,按照我们前面讲解的,我们先看到这儿啊。276行有个。你是来table初始化,其他你先不要管,我先告诉你这是怎么来的啊,那么来吧,Init这块是first来,注意请看我们没有四要素组的时候,我们现在呢,不得不随着并发的增强要开始新建四要素组了。
07:08
新建默认是几啊,12能跟上,为什么呀,因为我们在这个64位,这我们前面说过一个这个CE素速度永远是二次幂,对吧,那么这时候扩一倍,那么这个时候我们的干嘛,他这给你。写死了解NEW32,所以说隔到这儿了以后我们就会明白我们的第二步,原来直接扩了,新建了两个,那么现在就是一个贝斯再加零号和一号下标速度到这一波,OK,好,那么同学们。这个源码就是搁到这儿了以后,它告诉你in尼等于错,那这些全部下来,那么完火以后在这块新建S数组成功,那么继续返回到我们上一节的源代码。那搁到这儿,我们呢,继续来看。
我来说两句