00:00
各位同学,我们继续,接下来我们要讲解一下能挨达快是快在哪?它为什么快?底层原理是什么?了解原理以后,我们再进行源码的分析和解读。好通过前面的学习,我们已经明白了64和cell这么两个前置的基础知识和相关了解的类,那么long艾达它为什么这么快呢?下面我们来进行分析。在拢A之前啊,我们老规矩啊,我们的学习方法就是什么AB法则。Before。阿,那为什么我们会有这个进化?好是好在哪?有你之前和没你之前,我们的效果和变干出现在什么地方,那么大家都清楚啊。在我们使用隆埃之前,我们的前身是不是叫奥米克?那大家都懂,我们呢,是他,但是奥特米克long。它有哪些缺点导致我们在阿里手册里面推荐我们用隆埃呢?那么两者的区别和变化是怎么来的?那么导致隆埃达它为什么又比奥米克long在高并发下面性能更好呢?原理是什么呢?走起来,同学们,我们前面。
01:11
全部强调过一个东西。所谓奥米底层原理全是CS啊,弟兄们,没问题吧?好,什么是CS?不啰嗦了,我们都清楚假设啊,我这个里面有一个数据。那么假设我们的。结果是A,那么现在我们外面有很多很多的线程要来进行增强,注意CS啊,轻量级不加锁,那么这个时候就会导致同一时间段按照CPU底层C类原宇级别的,我们大家都清楚有且只有一个线程能够进来。对吧,那么进不来的那些呢?那么进不来的那些大家都清楚啊,那么是不是只好在外面空转做自旋呐。弟兄们,没问题吧,比如说现在有十个线程,好一个抢到了再进去修改,外面这九个不甘心,看过底层源码写的是个do啊,不停的就这么自学,可不可以没问题,但是注意这个是在。
02:13
县城少。数据小的前提下。你可以这么干。对吧?可是问题是什么事情啊,只要是什么涉及高并发。大数据,也就是我们前面原来说过的,是不是叫量变。必然而然,是不是会引起质变啊,弟兄们,这个没问题吧,那接下来我们就来了。如果你只有三五个线程,你用这个CS绝配,可是现在假设你干了它上万个线程,那就麻烦了,也就是说你的空转率就会加多,没问题吧,现在就变成只有一个人。
03:00
在这用着,外面一大堆就会在这空转,系统的CPU一下子就会打高,而且呢,给我们的整体的系统性能造成一些负担,那么对应我们这儿就好比是什么,现在春节大家都要买火车票回家,但是整个北京市啊,只有北京火车南站一个网点在卖火车票,大家都只能有一个网点去卖,那同一个售票窗口只能有一个人正在买,其他一堆人是不是只能漫长的旋转,漫长的自旋和排队,这是很恐怖的一件事情,性能急剧下降,火车站,火车总站排队广场上面是不是黑压压的一群人啊,因为大家都得在抢这个资源。所以说这个时候我们不得不就想起另外一句话,如果碰上这种情况下,我们会怎么解决?那么这个时候是不是必须要实现一种东西叫?化整为零,也就是我们在大数据的时候最重要的思想,那是不是叫分散热点啊。
04:00
OK,那么前面说过了,买火车票,如果整个北京市只有一个火车站。总站在卖票,只有一个售票网点,天下大乱,那么所以说我们现在碰上这种问题的话,那是不是只能是什么,整个市里面多开几个网点,然后让大家不要薅羊毛,就薅一个窗口给它分散过来。所以说我们现在。继续进化来到了我们的long a,刚才我们呢,有源码的解析,在64这个类这我们会看到一个long base,还有这么一个cell数组。那么注意情况是这样的,那么现在到了龙挨呢,他要干的一个活叫分散热点也记啊,根据我们前面的解读啊,这个呢,大家是晓得的,第一。更新竞争下面呢,这两个类具有相似的特征,也就是说假设啊,你用弄埃达并发量低的情况下,它几乎就等价于奥米克勒,那么它这呢?
05:02
也是只有一个。明白,那么现在假设啊,第并发下面,那么这大家呢,也就是在外面自学,那么假设啊。并发量也比较低的话,Long性能效果和一致,而它这一个网点也就是我们这儿。源代码所说的这个叫什么?能跟上,相当于说这个叫base value OK。我点一下加个点一下加个计数器全在这儿,但是随着竞争压力的变化,哐哐哐哐哐的上来一大堆多线程来抢了,哇,靠,他也收不住了,那么换以前奥特米克long,那没办法,只有一个窗口,我只能这么受着,但是到了龙艾达,人家进化了,那没什么好说的,弟兄们,我们不能说只有一个火车晚点,全市均匀分布,那么来我们新起。两个网点。这个。好,这个那么来能理解了吗?这个为什么叫C了吧,相当于就是什么扩容新建以后的临时售票窗口,好,那么也就是说一个窗口贝斯不够用了,那么我们现在就变成我们的。
06:15
Cell,那么假设这是零号窗口,OK,那么来,那么你马上也会明白,那么这个呢,是不是教我们的CELL1号窗口,OK,那么来,再看看这个cell。底子大家请看long value,然后也有cns,哎,说穿了它也就是个什么。CS的分散窗口,那么底层原理也就是大哥你不要薅羊毛就薅一个,买火车票就取一个窗口,那么这样以前只有一个,你不得不就好一个,那么现在。这个已经不堪重负了,扩容哎,有一堆人就可以去其他地再去买,那么这样是不是就达到了我们分散热点的目的啊,所以说这个就是隆埃达,它为什么性能要比奥特米克要快,就一句话,底层有分散热点好,那么最后啊,弟兄们,那么现在的话呢。
07:08
奥米克是只有一个窗口。数据量统计,可是long a它是有多个窗口了,那么所以说最后我们来进行。统计。求和的话。那么它呢,就是我们的result,就等于我们的这个贝,再加上我们的这个cell数组里面的是吗?赛数组。那么这个时候他们。上述两者全部,那么才是最后OK的答案能跟上,那么假设啊,我们这儿有。假设有1万个,那么假设在这儿是3000,在这儿是4000,在这是3000,那么最后那么大家匀一下给它串起来,那么这个才是我们最终的统计效果,OK,好,那么所以说呢,搁到这儿,我们来看一下那埃达为什么这么快,它的底层思想就是一句话。
08:06
来,同学们。我们呢,简单的来看一下啊。那艾达的基本思路就是什么?分散热点,将value值分散到一个什么cell数组当中,不同的线程会命中到不同的数组当中,大家别在一个地儿薅羊毛,各个窗口分散一下,那么各个线程只对自己操中的那个值啊进行CS操作,Cell底子也还是用NS啊,相当于有三个售票窗口,没错吧,这卖了3000张,这卖了4000张,这卖了3000张,那么最后统计一下,今天我们这三个窗口共计卖了多少张,So easy OK,所以说这样热点就被分散,冲突的概率大大减小,要想真正获取我们这个long这个值啊,将各个只需要将各个槽中的变量值累计相加就OK,好,那么最终这个sum方法我们之前也讲过,求和嘛,就会将所有S中的value和我们上面这个long base作为累加值啊,总体返回就是一个求和,核心思想就是将之前al米和的一个这个value值分的更新压力分散到多个value中去。从而。
09:11
降级更新热点,OK,那么所以说底层原理就这样来,弟兄们。无并发,或者说是单线程下面,或者是并低并发的时候啊,那没什么好说啊,就是只有一个它一个够用,它就不扩容,但是有并发多线程下面有点类似于我们的分段锁一样的是吧,分段了,分段CS操作更新CL数值,那么现在一个不够用了,开窗口来这儿,那么最后求和的方法就是我们的求和总数等于绿色的这个贝啊,加上全部的S单元这个速组,那么最终我们用数学公式总结,那么就是这个最终的也就是我们这的result等于我们的这个贝斯加对S数组的从零这个I等于零到N的西格玛求和,OK,那么所以说我们这儿就可以明白long either为什么这么快,那么来吧。
10:01
总结一下。内部有一个贝斯变量。来前面看过源代码了。贝,你看base value OK,一个基本盘。还有一个可能会被新建扩容,新建以后并扩容的C数组,那么贝斯变量低并发直接累加到该变量上面。C数组是高并发的时候累加进各个线程自己的曹州,那么现在高并发了以后,那么大家呢,怎么着,直接过来的话,就是别的线程,就是就像是打散了以后,那么它内部会有一套算法,落到哪个槽上就累加到哪,也是CS的加法,那么所以说到后时候你面试哈,对吧,咱们呢,真当是装个逼,你要是记得住的话,可以把这个这句话翻译成数学公式啊。交给你们的面试考官,那么我相信他呢,应该对你眼前一亮,好,那么结论就是被试值加C数组全部求和,那么也就是,呃,我们前面啊。在这说的这一套好。那么。
11:02
这一章解释了隆埃达他为什么这么快,那么接下来给大家说一下底层的源码,好原理就给大家介绍到这儿。
我来说两句