• 悲观锁和乐观锁的区别


    定义:

    悲观锁(Pessimistic Lock):
    每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。

    乐观锁(Optimistic Lock):
    每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。

    适用场景:

    悲观锁:比较适合写入操作比较频繁的场景,如果出现大量的读取操作,每次读取的时候都会进行加锁,这样会增加大量的锁的开销,降低了系统的吞吐量。

    乐观锁:比较适合读取操作比较频繁的场景,如果出现大量的写入操作,数据发生冲突的可能性就会增大,为了保证数据的一致性,应用层需要不断的重新获取数据,这样会增加大量的查询操作,降低了系统的吞吐量。

    总结:两种所各有优缺点,读取频繁使用乐观锁,写入频繁使用悲观锁。

    核心SQL代码:

    update table set x=x+1, version=version+1 where id=#{id} and version=#{version};  
  • 相关阅读:
    C#资源释放方法实例分析
    c#中在一个窗体中触发另一个窗体的事件
    C#定时器的用法
    C# 类的析构函数和释放函数
    C# 定时执行,文件占用
    C#多线程与异步
    Newtonsoft中JArray 转成list<object>
    C#中Dictionary的用法
    C# 解析Json文件(使用NewtonJson库)
    mysql无法远程连接10038错误的坑(阿里云ecs)
  • 原文地址:https://www.cnblogs.com/upward/p/9711648.html
Copyright © 2020-2023  润新知