高并发底层锁机制及其优化

86 阅读1分钟

1.Synchronized锁

  • 互斥锁,悲观锁,同步锁,重量级锁(线程阻塞,上下文切换,操作系统线程调度),性能差
  • jdk1.6之前线程加锁没成功则放入队列等待,
  • jdk1.6之后引入几种状态:无锁,偏向锁(对象内部保存线程id,如果id和之前一致则不加锁),轻量级锁(CAS),重量级锁
  • 锁升级是根据线程数决定。
  • 大量的线程加锁,重量级锁性能比轻量级锁性能高,因为有大量的CPU自旋空转

2.CAS

  • 自旋锁,乐观锁,轻量级锁,无锁
  • 比较和交换,比较old值,设置new值,如果比较old不一致,再while获取old值设置新值
  • 原子性问题-lock cmpxchgq 缓存行锁/总线锁
  • 多线程CAS可以把加锁的值分段去加锁处理,避免大量线程CPU空转,最后做值的合并

3.Nacos底层高并发实现

  • CopyOnWrite思想:写时复制,写的时候写副本,读是读真正的注册表,写完复制到真正的注册表
  • 读写分离,解决了高并发和加锁问题