系统性能量化分析-8-并发同步

操作系统提供的同步总结

锁分类

按锁行为划分

  1. 自旋锁
    忙等待
  2. 条件变量

按同步场景划分

将不需要做并发保护的情况挖掘出来,提升并发度

  1. 无差别并发场景
    并发进程、线程不做区分,默认两两互斥
  2. 生产者-消费者场景
  3. 读者-写者场景

进一步细分的读写锁

  1. Rwlock( reader-writer-lock)

    读写互斥,写不能阻止读;写存在饥饿

  2. Seqlock(sequential-lock)
    适合场景:gettimeofday()

    • 解除了读写互斥、依旧写写互斥
    • 维护一个递增值seq,写操作进入和离开临界区均自增一次
    • 读操作前,读seq,奇数说明正在写,等待
    • 读seq为偶数,进入临界区,出来,再读一次seq,seq不变;结束;seq变了,再读一次
  3. RCU (read-copy-update)

    2002年加入Linux内核主线

    RCU三个基础原理

    1. 发布-订阅机制
    2. 等待先前存在的read结束(RCU宽限期)
      如何判断宽限期结束
      1、简单实现(非抢占式环境,关闭中断
      2、

Peterson 算法 (软件实现并发同步)

证明

反证法

实际执行可能会出现 同时进入临界区

原因

  • 现代处理器,指令重新排序:违反了顺序一致性
    例如load,store顺序

    • 所以需要做 内存屏障:可以恢复顺序一致性
  • 防止编译器优化

    • 设置编译器屏栏

并发带来很多问题

  1. 并发bug (2009)

    • 死锁

    • 非死锁 并发bug占比70%

      原子性破坏

      顺序一致性破坏

  2. Locks are broken

    借助数据库领域中的概念

    • 事务

    悲观锁

    乐观锁

分布式系统中的并发问题

CAP理论

CAP理论是分布式系统设计中的一个基本原则,它由计算机科学家Eric Brewer提出。CAP是指一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个特性。

  • 一致性(Consistency)指的是系统中的所有节点在同一时间点看到的数据是一致的。换句话说,当一个节点更新了数据后,其他节点应该能够立即看到这个更新。
  • 可用性(Availability)指的是系统在任何时候都能够正常响应用户的请求,即系统不会因为某个节点的故障而导致整个系统不可用。
  • 分区容错性(Partition tolerance)指的是系统能够在网络分区的情况下继续正常运行。网络分区是指系统中的节点之间由于网络故障或其他原因无法相互通信。

根据CAP理论,一个分布式系统无法同时满足一致性、可用性和分区容错性这三个特性,只能在其中选择两个。这是因为在网络分区的情况下,要保证一致性和可用性是相互冲突的。

CAP理论_cap理论案例-CSDN博客

在实际应用中,根据具体的需求和场景,可以根据CAP理论来选择合适的系统设计策略。如果数据的一致性对系统非常重要,可以选择保证一致性和分区容错性,但可能会牺牲一部分可用性。如果系统需要高可用性,可以选择保证可用性和分区容错性,但可能会导致数据的一致性稍有延迟。

总之,CAP理论提供了一个思考和权衡分布式系统设计的框架,帮助我们在设计和实现分布式系统时做出合适的决策。

设计考虑

  1. 为可用性牺牲一致性