首页 > 其他分享 >一分钟教你知道乐观锁和悲观锁的区别

一分钟教你知道乐观锁和悲观锁的区别

时间:2022-10-12 15:05:16浏览次数:37  
标签:区别 Lock 一分钟 乐观 悲观 别人 数据 上锁


悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。

 

乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。

 

两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

标签:区别,Lock,一分钟,乐观,悲观,别人,数据,上锁
From: https://blog.51cto.com/u_15826214/5750755

相关文章

  • #{}与${}的区别
    区别:1.#{}解析为一个JDBC预编译语句(preparedstatement)的参数标记符,一个#{}被解析为一个参数占位符;而${}仅仅为一个纯碎的string替换,在动态SQL解析阶段将会进......
  • 关于useState和useRef的区别
    1:  useState的值在每个rernder中都是独立存在的。而useRef.current则更像是相对于render函数的一个全局变量,每次他会保持render的最新状态。这种关系更像是js一个经典......
  • Integer和int的区别?为什么要设计封装类?
    Integer和int的区别:1.Integer默认值是null,int是0;int只需要定义类型直接赋值,而Integer需要创建对象2.Integer值存储在堆内存里面,int是存储在栈空间里面3.Integer作为对象......
  • 关于Java中length、length()、size()的区别
    以前总是觉得自己好像会了,但是某天忽然面对这个笔试题还是会恍惚一下,混淆和答错的几率也很大,不知道有没有其他人像我一样的。所以今天把这个问题记一下,希望印象更深刻。......
  • IPV4和IPV6有何区别?为何IPV6没有普及?
    IP指网际互连协议,InternetProtocol的缩写,是​​TCP/IP​​体系中的网络层协议。IP是整个TCP/IP协议族的核心,也是构成互联网的基础。设计IP的目的是提高网络的可扩展性:一是......
  • Python的常用库及区别——numpy、pandas、matplotlib、scipy
    1.Numpy  numpy是python科学计算的基础包,好多算法都是基于numpy构建的。其功能有:快速高效的多维数组ndarray用于对数组执行元素及计算以及直接对数组执行数字运......
  • 面试官:说说 String.intern() 和常量池?不同 JDK 版本有什么区别?
    0.Background在JAVA语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个......
  • Java中equals和==区别
    “==”和equals的区别......
  • 细数6种垃圾回收器的区别, 快进来看看有没有你要用的
    前言大家好啊,这里是Yve菌,今天给大家详细介绍一下我们在进行GC垃圾回收时的主力军-垃圾回收器.由于我们使用的jdk版本有不同,使用的堆内存大小也不同,这个时候我们......
  • 悲观锁与乐观锁
    何谓悲观锁与乐观锁乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说......