什么是CAS?CAS的作用以及缺点 | 您所在的位置:网站首页 › cas-overlay-template的作用 › 什么是CAS?CAS的作用以及缺点 |
老顾聊技术 2019-06-03 00:28:00 欢迎关注头条号:老顾聊技术 精品原创技术分享,知识的组装工 前言这道题是考察面试者的并发编程的知识,关于悲观锁和乐观锁的。 锁回答这个问题,可以先介绍一下锁要解决的问题,以及锁机制的缺点。 引入锁就是为了解决多线程竞争同一个资源时,出现脏读、数据不一致问题。一般我们常用的是synchronized等排他锁, 这种锁存在的问题: 1、多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题 2、一个线程持有锁会导致其它所有需要此锁的线程挂起直至该锁释放 CAScas是另一个无锁解决方案,更准确的是采用乐观锁技术,实现线程安全的问题。cas有三个操作数----内存对象(V)、预期原值(A)、新值(B)。 CAS原理就是对v对象进行赋值时,先判断原来的值是否为A,如果为A,就把新值B赋值到V对象上面,如果原来的值不是A(代表V的值放生了变化),就不赋新值。 小伙伴们应该知道j.u.c并发编程包,我们看一下AtomicInteger类,AtomicInteger是线程安全的,我们看一下源码
再看一下unsafe源码
我们看到do while自循环,这里为什么会有自循环,就是在 判断预期原值 如果与原来的值不符合,会再循环取原值,再走CAS流程,直到能够把新值B赋值成功。 CAS缺点cas这个方式也存在一定的问题: 1、自循环时间长,开销大 2、只能保证一个共享变量的原子操作 3、ABA问题 ABA问题是什么,小伙伴们自行网上看一下哦,面试也有可能问到。 -End- 如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢! 10几年的经验实战分享 相关微服务,分布式,高并发,高可用,企业实战,干货等原创文章正在路上 欢迎关注头条号:老顾聊技术精品原创技术分享,知识的组装工 推荐阅读 1、如何访问redis中的海量数据?避免事故产生 2、如何解决Redis热点问题?以及如何发现热点? 3、如何设计API接口,实现统一格式返回? 4、你真的知道在生产环境下如何部署tomcat吗? 5、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案 6、分享大厂分布式唯一ID设计方案,快来围观 7、你想了解一线大厂的分布式唯一ID生成方案吗? 8、你知道如何处理大数据量吗?(数据拆分篇) 9、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇) 10、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗? 11、你了解大型网站的页面静态化吗? 12、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性? 13、你知道怎么解决DB读写分离,导致数据不一致问题吗? 14、DB读写分离情况下,如何解决缓存和数据库不一致性问题? 15、你真的知道怎么使用缓存吗? 16、如何利用锁,防止缓存击穿?重构思想的重要性 17、海量订单产生的业务高峰期,如何避免消息的重复消费? 18、你知道如何保障生产端100%消息投递成功吗?
|
CopyRight 2018-2019 实验室设备网 版权所有 |