1.Synchronized锁
- 互斥锁,悲观锁,同步锁,重量级锁(线程阻塞,上下文切换,操作系统线程调度),性能差
- jdk1.6之前线程加锁没成功则放入队列等待,
- jdk1.6之后引入几种状态:无锁,偏向锁(对象内部保存线程id,如果id和之前一致则不加锁),轻量级锁(CAS),重量级锁
- 锁升级是根据线程数决定。
- 大量的线程加锁,重量级锁性能比轻量级锁性能高,因为有大量的CPU自旋空转
2.CAS
- 自旋锁,乐观锁,轻量级锁,无锁
- 比较和交换,比较old值,设置new值,如果比较old不一致,再while获取old值设置新值
- 原子性问题-lock cmpxchgq 缓存行锁/总线锁
- 多线程CAS可以把加锁的值分段去加锁处理,避免大量线程CPU空转,最后做值的合并
3.Nacos底层高并发实现
- CopyOnWrite思想:写时复制,写的时候写副本,读是读真正的注册表,写完复制到真正的注册表
- 读写分离,解决了高并发和加锁问题