00:00
好,同学们,我们继续,目前我们应该给大家讲解这,但是为了更好的帮助大家消化和吸收,我们先复习一下我们之前讲的步骤和流程,花一点点时间,哎,不要觉得老师墨迹啰嗦,不是这样的啊,因为这个圆码非常的繁琐,到后面呢,越晦涩越难懂,但是呢,做难事必有所得,弟兄们的内功就是这样一点点逼出来的。好,我们先暂停到这儿,先来看一下,捋一下我们的思路啊,注意啊,我们先说爱的,刚才也涉及到这个了,按照我们的三段,我们先完成I,后面再说,详细的说它这儿你先忽略,那么来同学们,我们大家都清楚。刚开始啊,那么现在呢,我们呢,呃,根本就没有见过这个数组,所以说我们的CS啊,只在我们这一个上面来进行增加,对吧,那么突然如果说岁月静好。就在贝斯这儿干。如果不OK了,那么在这。是false,整个取法是错,那么我们就要进来,进来了以后当前我们来看一下。
01:06
也就是说被子不够用了啊,那假设我们现在还没有后面这四个,OK,我们现在就要新建,好吧,新建我们的sales单元格数组啊,那么隔到这儿,这个数组还没有,是不是烂,当然是烂了,所以说直接这一步就是错,直接过来。那么到这一步,前面这些哈希值的获得它呢,中间是一个大型的。大一大段的负循环,那么我们说过请大家先忽略,我们呢,直接先找到了这么一段东东,这些待会我们说,那么搁到这儿以后,同学们我们会看到人家直接告诉你了,新建几个两个,而且我们前面也说过,对于这个cel单元格数组。是二次面2481直到你的CCPU的核数,方便以后的微运算,所以说我们这儿给大家说过贝斯不够用了以后,马上新建了两个,OK,这样坑号坑位是零,坑位是一,没问题吧,那好,这个就是我们的零代词下标,那么在这儿呢,又是按照前面的这个哈希值和一做一个微运算,得到这个LRS,然后呢,六。
02:15
这那么这个X一般我们是默认是一,然后啊,假设这个呢,就是给其中的某一个坑位给赋值啊,那么假设啊,就是一号坑位,那么现在呢,就是一,那么我过来了,完了以后。搞定in为finally,这个self busy为零,其他我们先不管,我们就先说这是吧,In,那么这块相当于说我们从这个in。从force变为出break,跳出OK,那么搁到这了以后我们呢?就清楚了。这一次就完成好,那么接下来我们继续,那么相当于说。完成了刚才的一些了以后零号坑外。是。一号坑外,那么这个呢,在这新建了两个,我们接下来相当于说分散热点贝斯,你可以加四零可以加四一可以加OK好了,各位同学,我们下面呢继续,那么完了以后又继续高并发,又继续来抢这个东西,那么假设啊过了,那么现在呢,我们呢。
03:20
再来一次啊,现在这个cel速组等不等于那不等于那了,OK,因为我们已经新建好这两个了,我们对标在这对吧,所以说我们的程序不会管后面了,那么下面这个单元格速组不等于呢?确实已经新建过两个,那么为错进来,那么再来看等于等于是不是等于,那当然已经不等于烂了,所以说在这。我们呢?直接过,那么换句话说,在这两个条件啊,就是前面这两个条件已经不具备了。那么现在就是不等于呢,那么呢,First,那么当然这个长度也不会小于0FO,因为长度是二对吧,那么下面隔到这,那么就隔到这儿。
04:02
随着我们的高并发继续。多线程又过来进行挤站来,前面说过了,现在已经数组有了,不等于难是出进来了,连这圈过我们下面这个方法,它的意思是通过get pro这个方法,我们下一讲讲这儿可以类比我们的哈map得到某个具体的槽外的地址啊,那我们后面啊,可能会有很多很多很多的槽位,总之一句话,你随了随机了以后按照你的算法得到某一个槽位啊,那么假设这个as啊,就是这个cel数组。它的某一个槽位上的值赋给这个A,这个A就是某一个具体的CL,这个值看等不等于,那如果等于,那说明这个槽位上。为空还没有值呢,那我需要给它编写,那么走进这个方法假设啊,我们这比如说到这个一号坑,一号槽位,假设这个就是C数组是一,一的值是多少?现在是一啊,举个例,那么这个。
05:01
一不等于,那么那么它呢,就是什么force,那么force以后继续往前走,那么好,这个A相当于现在就是我们的一号坑位,再做一个CS操作,那么来看现在a.Y6的值啊是几啊,是这个一一完了以后再加个几X啊,我们这儿说过了,就是一一加一等于二整个CS操作是几,就是我们的二返回值就是错,那么说明什么?这个错按contented就说明没有冲突,那么这个是个错,再取法是个false,说明什么不走这一分支,OK,跳出来,那么加了一次以后,那么在这儿就是二没问题吧,好,那么依旧继续在高并发下面不停的干。现在继续过来调这个方法,哐哐哐的多线程继续上来速组不等于,那没问题吧,那么这个方法只要这个是不等于捺为处了就进来,这个暂时用不到,那么依旧是前面的判断,那么依旧是找这些坑位,那么现在这些坑位那么只有什么零和一,那么假设啊,这次找到时零号坑,那么零号坑等不等于呢?现在假设零号坑啊,还没有值呢,那么现在过来。
06:12
进到这儿,那么进到这儿了以后,我们后面会详细讲这个方法,那么它分成三段。这个呢是已经有数组的情况下,而这个呢是初始化建设数的情况下,而这个呢是给你一个兜底的,那么我们呢,先快快的过,那么通过到这儿了以后啊,假设呢,它这段的这个方法已经是什么,大家看数组呢,呃,已经不等于呢,说明已经建好了,好那么我们再往这个里面呢,再写个值,OK啊慢慢的比如说这已经加到了12,这呢已经加到了50。OK,那么相当于说在这两个热点上就这样不停的CS,哎,如果行了,我们呢,也就往里面写值,就这么简单,OK,好了,那回到我们刚才的代码。那么不好意思了,如果说啊,在这块了以后,现在继续高并发,我不管到哪个槽位都不等于烂了听懂,那么到我们这儿就是。
07:10
零坑,零号坑和一号坑这个下标都有值了,也在热点这拼命的做着这个CS的这个热点,这样的分散我们的压力了,但是突然发现。不好意思啊,直到有一天,假设啊一号坑位CS这个force,也就是说高并发上来以后,这两个槽位都扛不住了。零号看,一号看,这两个也不够用了,都是什么?这就得到了我们的一个false,就是说unconended没有冲突吗?错,False有冲突了,那么这个false取反,就是错,又要重新进了,那么就要进行我们的第三步,那就是扩容,也即这两个热点朝外也不够用了,那么继续往下。我们呢,脚慢慢的给它扩容,从两个变成了我们的什么四个,哎,那么也就是说,如果这取反以后要进到这,那么扩容是下一讲的事儿,你就知道这个流程和规矩就行,那么慢慢的。
08:11
相当于说我们这两个不够用了,那怎么办呢?那么继续过来,那么变成二号坑三号坑,明白,因为扩容我们前面也已经给大家说过是二次幂,好,那么。二就变成四个,一直扩到你的CPU的最高核速,那么来同学们,我们到这了以后就可以来捋一捋,假如说我们的步骤。分步骤递减和递增,那么到这我们艾特方法就可以算是告一个段落,第一个最初没有竞争的时候只更新贝斯。第二个,如果更新贝斯失败了以后,首次会新建一个C数组。第三种情况,当多个线程。同一时刻某一个C竞争比较激烈,那么就跟刚才我们所说的啊,就是在这一步到这儿了,就是。这两个啊,连起来以后,这个A说明什么,我们的热点上面的竞争也比较激烈,就是现在当前这个两个开已经不够用了,那么慢慢的我们就要什么,就要对这扩容,OK,那么这个就是我们爱的三步,那么希望同学们务必能够掌握。
我来说两句