00:00
好,同学们,上一讲我们给大家介绍隆达为什么这么快,那么它的原理给大家讲解清楚,那接下来原理明白以后,我们再深入一步,源码解读,深度分析。好,我们来。呃,熟悉杨格风格的理论实操小总结,这次我们反过来,先把结论给大家说明白,然后咱们直接长驱直入,源码说话来。通过前面的讲解和介绍,我们当然了。都清楚。那either呢?是在无竞争的情况下面呢,它跟奥m long是一样的,OK,几乎这两个都是对同一个贝斯进行操作,那么低并发下面也long挨,也不用变形扩容,相当于只有一个售票网点足够,但是当出现竞争关系,就是高并发线程越来越多来的时候,化整为零,分散热点的做法,用空间换时间。获取扩容,完成一个一个的cel数组,将一个value拆分成拆分进这个数组,那么相当于说各个线程抢到以后就不再只骚扰这个base了,而是什么各归其主,各有其位,那么多个线程就需要同时对这个value进行操作了。那么可以对。
01:17
线程ID呢,进行哈希,得到这个哈希值,再根据这个哈希值映射到这个宿主C的某一个下标,这句话的意思就是说。以前只有它,但是现在你扩容啊,那么根据我们前面说过,它的扩容的话呢,都是二次幂,那么要么就不扩,要扩首次啊,就是两个回头,我们会拿会说会拿源码证明,那现在。假设新进来一个线程。以前都找他,现在扩容了,有新店了,降低这个热点,那么现在这个请求过来了,是分给他呢,还是分给他呢?这个时候它底层是有算法逻辑的,那么来同学们不妨啊,我们来看看六。哈,Shma。
02:00
点put。这是大家最熟悉的,那么我们大家都清楚哈希map数组加链表加红黑数,那么尤其这个数组我们来了一个元素以后,放到哈希map里面的哪一个呢?因为默认值大家都清楚这哥们多少16对吧?这个数组的长度是16,那么假设。后面这个元素进来了,这个是坑位,下边有零到15,它放哪呢?它是底层有一套算法的,那么来put。Port我们都清楚,对于map底层是一个叫node类型的,名字为table的一个。Node类型的数组,那么现在来了一个元素放进这个node数组里面,放到哪个槽位,哪个坑位里面呢?在这儿。能干啥?大家请看它有个table I,假设I等于N减一,跟这个哈希值做了一个相应的微运算,得到这个I,保证它在这16个里面,那么落到哪一个坑里面,那么所以说在这块我们底层原理也跟这个类似啊,相当于说我们也就是进来了一个线程通过它。
03:12
得到了一个哈希算法映射到这个数组的某一个下标,就是说扩容以后你是进零号槽位还是一号槽位,OK,好,那么在对该下标所对应的值进行自增,那么当所有线程操作完成,对。数组S所有值和被都加起来作为最终的结果,好,那么同学们请看啊。现在没竞争的时候只是贝斯啊,那么后面贝斯也忙起来了,自学自学自学分散热点扩容,那么0123啊,假设已经有四个了,那么第一个线程可能是。进到零号坑位后面二三都有可能同时进到了一号坑位,那么相当于说就加了两次啊,那么最后我们晓得的结果就是贝斯加全部的数组OK,零加到N的西格玛求和好了,那么接下来。
04:01
这个结论大家明白了以后,那么我们来最简单的来看一下no either,那么搁到这儿了以后。我们前面都用过这个用either,那么我们呢,用这个increase的时候,它这用的是爱的方法,这波没问题吧,所谓二的就是这个上面那么二的。就是二的long这个上面这个方法,那么永远记着这个X啊是几,就是一点一下加个一好了,那么为什么挨。它就那么快,底层原理就在这些源码来,这段源码共计分三步,第一个爱的方法,第二个爱的方法是一些。基础base类的相加以及我们C数组的扩容,那么三段了以后,真真正正干活的是是这个long accumul。那么来。点进去,那么来同学们,待会我们就要深入的讲解这一段原代码,他的思想设计和编写的非常牛逼,那么GUUC里面的大神倒个立,看看高手是如何写代码的。好,那么最后。
05:12
我们大家呢,都明白。如果说全部加完了以后,在long挨高并发这那么我们底层第三步是不是叫sum求和,那么来,所以说它是ADD long accumulate累加,最后some明白好了,那么接下来我们就挨个挨的过,一步一步的敲,那么来首先我们来看一下这个I的代码,这是我们的第一段,接下来就由它开始为大家进行源代码的分析,作为我们的第一个。突破口。
我来说两句