00:01
那各位同学,我们呢,已经完成了。CAS的底层原理。那么我相信。这道题目。这道题目。同学们应该能答了吧?好,那么呢,我们呢,往下翻。这个时候面试官就会问题第三个啊,这个现在问的都是连环的,不错,这位同学你知道CS用过compare andset这个比较方法也知道,UNS类也知道。全部的业务流程。那么请问CS的缺点?好size一致性,保证并发性下降。CS不加锁。保证一致性。方式。干嘛,它需要多次比较。有可能,那么同学们想一想这个CS的缺点,我们讨论一下。好,那么同学们呢,课堂上讨论了一下,那么接下来兄弟们,我们呢,直接开工。
01:07
CAS的缺点。有三。第一个循环时间长,开销大。什么意思呢?请看源代码,我这是不是do外要啊,我的要求是什么?比较成功了以后跳出循环,如果比较不成功,我是不是一直会在这儿do外要这反复的转着。请看有个do啊,如果CS失败什么意思呢,就是。Wow,这。就是this.compare and swipt int,这个返回first比较失败,Force取法是不是错?那么这个时候我是不是就得自学自我,就像旋转一样,就说白了,所谓的自旋就是子循环,有点类似于。干嘛呢,我会一直尝试啊,如果长时间一直不成功,就是我这个线程比较倒霉。啊,总有人在我前面修改过了,我每次拿到的时候回去都不一样,那么这个时候是不是读转转转转转转转,自旋在这转转转转。
02:08
可能会给CPU带来很大的开销。为什么刀并发下面。你起了10万个线程,刚好这10万个线程互相改的乱七八糟的,都导致在我之前有人改过,那么大家是不是一直在这转,那么CPU的耗损是不是一下子CPU的利用率就是攀攀升了。所以说干嘛,第一个问题。循环时间长,开销大。再次强调,那cns它是什么?用了一种折中的方法,没有加锁,允许多线程并发修改,但是互相比较。互相比较以后,直到全部的线程成功,它并发性加强了。但是什么呢?虽然说。他没有SYNCH的缺点,但是又引来了另外一个问题,这样是不是循环比较开销大呀?
03:00
好,所以说一定要跟CS和森奈特点,森克袋是加锁,他妈同一时间段只有一个人过来,不用讲,我锁定这个位置你别跑,我做完了下个人再接着做,我并发性下降,但是做完一个少一个,做完一个少一个。那么最终直至全部完成。但是CAS啊。他用的是do爱啊。他没有加锁。他要保证一致性,要保证并发性,那么自然而然干嘛?如果出现这种极端情况,极极端的情况将会导致自学频繁。那么CPU的。使用率。增高。第一个缺点,第二个只能保证一个共享变量的原子操作什么啊。几个?一个。什么意思呢?对于多个共享变量的操作。干嘛循环CS就无法保证操作的原子性,这个时候只能用加锁来保证,那么啥意思呢?兄弟们看源码刚才看到了。
04:02
我们都知道这个VALUE1是不是Z啊,Z是代表当前对象数,不是就只一个啊,但是加锁你是不是可以保证一段代码。甚至于就是多个线上的操作,操作加锁以后我们都可以保证,也就是从数量上它只能保证一个。那么最重要的,面试官最想听的就是。ABA问题。如果你答出来ABA问题。恭喜你,那么CAS这块你是100%完完全全掌握。那所以说呢,在这些面试题,现在大厂考的呢,阿里啊,美团啊,京东啊,包括滴滴,包括蚂蚁金服,今日头条考的越来越难。那么这个时候。为啥呢?所以说呢,如果那么多面试者,你只会说啊,CS的比较平,交换用一下简单的说一句。根本没有答出来ABA问题,面试官就知道你这个人学习的研发能力根本不深。
05:00
那么所以说呢,需要各位同学呢,开启学霸模式。那么好,这三个就是CS的缺点,一般答,这三个够了。那么接下来我们就要详细唠唠什么是ABA问题。这是CAS,它解决了一个问题。他不加S,不用加锁了,但是它又引出来了一个更大的问题,那就是ABA。好,那么呢,CS的缺点就给大家介绍到这儿。
我来说两句