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

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

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

原文:http://blog.csdn.net/hongchangfirst/article/details/26004335

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst

一分钟教你知道乐观锁和悲观锁的区别相关推荐

  1. [MyBatisPlus]乐观锁和悲观锁

    乐观锁和悲观锁 场景 一件商品,成本价是80元,售价是100元.老板先是通知小李,说你去把商品价格增加50元.小李正在玩游戏,耽搁了一个小时.正好一个小时后,老板觉得商品价格增加到150元,价格太高, ...

  2. MyBatisPlus的乐观锁和悲观锁

    MyBatisPlus的乐观锁和悲观锁 1.乐观锁 1.1 场景 2.0 乐观锁与悲观锁 3.0 模拟修改冲突 Demo 4.0 通过乐观锁观念解决问题 文章顺序及整体目录可查看(点我即可) 1.乐观 ...

  3. [初级]深入理解乐观锁与悲观锁

    2019独角兽企业重金招聘Python工程师标准>>> 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔 ...

  4. 乐观锁与悲观锁——解决并发问题

    引言   在多用户环境中,在同一时间可能会有多个用户更新相同的记录,这会产生冲突.这就是著名的并发性问题. 典型的冲突有: 丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失.例如: ...

  5. [精选]MySQL的各种锁(表锁,行锁,悲观锁,乐观锁,间隙锁,死锁)

    不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的.因为数据库隐式帮我们 ...

  6. 乐观锁和悲观锁,可重入锁和不可重入锁(1)

    乐观锁和悲观锁,可重入锁和不可重入锁(1) 前言 感觉有一段时间没有写博客了呢.还是再接再厉吧,适当程度的总结能让我自己能够更加深入地巩固和理解自己所学习的一切. 还有,我很懒,而且我还是比较喜欢写日 ...

  7. Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景

    一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁( ...

  8. 深入理解乐观锁与悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性. 乐观并发控制(乐观锁)和悲观并发控制(悲 ...

  9. 【转】数据库的乐观锁和悲观锁

    [转]数据库的乐观锁和悲观锁 有时候为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突.为了解决这个问题,大多数数据库用的方法就是数据的锁定.所以说,悲观锁和乐观锁主要是用来 ...

  10. 乐观锁、悲观锁简单分析,回忆旧(新)知识...

    2019独角兽企业重金招聘Python工程师标准>>> 今天被人问了下乐观锁和悲观锁,突然在脑子里好模糊,但又感觉以前很熟悉的东西竟然忘得这么干净.所以恶补加记录一下. 乐观锁和悲观 ...

最新文章

  1. 彻底理解Canal,看这篇就够了
  2. 手把手教你创建自己的Altium Designer集成元件库
  3. http协议之request
  4. 【地理建模】现代地理学中的数学方法:主成分分析法案例详解
  5. (95)分频器设计(偶数分频)
  6. 硬件基础知识---(4)电阻的核心参数
  7. SQL SERVER自带调试工具SQL Server Profiler简单用法
  8. 【数据结构和算法笔记】用c语言实现栈
  9. 分段式多级离心泵_溧阳耐磨矿用多级泵水泵厂
  10. Win 7退役,这些Linux发行版可以替代
  11. vue 如何清除浏览器的内存_浏览器垃圾回收机制与 Vue 项目内存泄漏场景分析
  12. javascript 日期时间函数(经典+完善+实用)
  13. 网页抓取软件-免费网页自动采集抓取任意内容软件
  14. unity游戏开发学习笔记
  15. 从来不流鼻涕php没有毛病,睡觉的时候为什么不会流鼻涕?
  16. 433MHz资讯一点通
  17. 解决Mysql计算时除数为0
  18. python发送邮件群发软件_python使用tkinter写的邮件群发软件-python图形界面编程
  19. 51学习(2):vscode+ Embedded IDE开发环境搭建
  20. Wireshark 抓取 iphone 测试机的数据包

热门文章

  1. 2、Python接口自动化系列之unittest结合ddt的使用
  2. 7-5 输出倒三角图案
  3. Django配置文件介绍
  4. Python周立功CAN接口卡接口库函数
  5. 计算机专业学生应该学什么 【转】--霍炬先生原创
  6. Vue中导入DayJs(时间戳转时间格式)
  7. elementui table 在jsp页面中横向滚动条的问题
  8. Windows家庭版-本地组策略添加用户或组
  9. 2021年度软件工程师薪酬报告
  10. 2022 年前端趋势的 技术发展情况