为什么无锁的效率高
1. CAS与synchronized 对比
-
优点:吞吐量高
-
缺点:需要频繁使用cpu,资源开销大
-
无锁情况下,即使重试失败,线程始终在高速运行,没有停歇
-
synchronized 会让线程在没有获得锁的时候,发生上下文切换,进入阻塞
打个比喻线程就好像高速跑道上的赛车,高速运行时,速度超快,一旦发生上下文切换,就好比赛车要减速、熄火,等被唤醒又得重新打火、启动、加速… 恢复到高速运行,代价比较大。
但无锁情况下,因为线程要保持运行,需要额外 CPU 的支持,CPU 在这里就好比高速跑道,没有额外的跑道,线程想高速运行也无从谈起,虽然不会进入阻塞,但由于没有分到时间片,仍然会进入可运行状态,还是会导致上下文切换。
2.cas特点
结合 CAS 和 volatile
可以实现无锁并发
,适用于线程数少、多核 CPU 的场景
下.
但是当线程数大于CPU的最大核心数,CAS效率不会提升.
-CAS
是基于乐观锁
的思想:最乐观的估计