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

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

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

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

作者:hongchangfirst

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

转载于:https://www.cnblogs.com/lindoubao/p/7057709.html

【转】乐观锁和悲观锁的区别相关推荐

  1. 乐观锁和悲观锁区别以及使用场景

    乐观锁和悲观锁是并发控制中两种不同的策略,用于解决多个线程或进程同时访问和修改共享数据时可能出现的并发问题. 悲观锁 悲观锁的基本思想是,在数据被访问时,假设会有其他的线程或进程也会访问这个数据,所以 ...

  2. 面试题之——乐观锁和悲观锁区别

    对于乐观锁和悲观锁的区别及应用,要牢记一句话:读取频繁使用乐观锁,写入频繁使用悲观锁 本文转自:https://blog.csdn.net/L_BestCoder/article/details/79 ...

  3. Mysql乐观锁与悲观锁的区别

    原文地址: 05 mysql-乐观锁与悲观锁的区别 文章目录 1.悲观锁 2.乐观锁 3.两种锁的使用场景 4.乐观锁常见的两种实现方式 4.1. 版本号机制 4.2. CAS算法 5.乐观锁的缺点 ...

  4. 乐观锁和悲观锁的区别及使用场景

    转载自:https://blog.csdn.net/u010739551/article/details/81184203 悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每 ...

  5. java中的锁---乐观锁与悲观锁的区别

    锁,是开发中不得不掌握的一个知识点. 在面试中也会经常问到.其中乐观锁与悲观锁为最常见.首先介绍下两种锁 一:乐观锁: 1 介绍: 它的心态很好,每次别人使用它的时候,它会乐观的认为别人不修改数据,所 ...

  6. 乐观锁与悲观琐的区别

    锁.我们知道,最常用的处理多用户并发访问的方法是加锁.当一个用户锁住数据库中的某个对象时,其他用户就不能再访问该对象.加锁对并发访问的影响体现在锁的粒度上.比如,放在一个表上的锁限制对整个表的并发访问 ...

  7. 乐观锁与悲观锁的区别

    乐观锁和悲观锁都是用于解决并发场景下的数据竞争问题,但是却是两种完全不同的思想.它们的使用非常广泛,也不局限于某种编程语言或数据库. 乐观锁的概念: 乐观锁:指的是在操作数据的时候非常乐观,乐观地认为 ...

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

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

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

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

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

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

最新文章

  1. 客户端爬取-答网友问
  2. mysql的雪崩穿透_缓存穿透、缓存击穿和缓存雪崩实践
  3. css3正方体选中父层 子层解体_CSS3 :nth-child(n)选择器 匹配属于其父元素的第N个子元素...
  4. 【openMV】霍夫变换---直线提取
  5. NetCore 2.0 + Swagger 的WebAPI 模板例子
  6. Android异常总结---3.Failed to install *.apk on device 'emulator-5554': timeout 错误提示:
  7. Linux系统各文件、目录介绍
  8. matlab简单分析模拟滤波器 IIR
  9. 《计算机网络基础》考试大纲
  10. linux redis 安装部署,Linux Redis安装部署
  11. [hdu4311]Meeting point-1
  12. 巴克莱银行实现敏捷及DevOps与本地文化的融合
  13. python爬虫实例——中国电影票房
  14. 8250cdn清零 lh_兄弟 HL-L8250CDN驱动
  15. dede后台登陆提示 验证码不正确 解决办法
  16. bmp怎么改jpg格式?
  17. 【WebGIS】leaflet入门-使用GeoJSON
  18. GB2312和BIG5,Unicode/UTF8等编码之间的互相转化
  19. 怎么把做好的ps保存成图片_PS怎么把一张图片切片保存成多张png图片?
  20. cad和php哪个工资高,CAD顶级绘图员必备,人手一份的绘图命令,学会工资上万不是梦...

热门文章

  1. 三大系列总结(offset client scroll)
  2. pip换源及指令的使用
  3. clickhouse分布式查询
  4. Android学习目录
  5. Android热修复技术初探(三):动态加载外部资源
  6. 小型公司 --- OSPF 不连续区域进行通信配置
  7. Cloudflare泄露客户数据,IT部门可从中吸取什么教训?
  8. AC日记——可能的路径 51nod 1247
  9. 客户机无法上网,ping 127.0.0.1提示unable to contact IP driver ,error code2
  10. ubuntu 启动进入initramfs错误解决办法