一分钟教你知道乐观锁和悲观锁的区别
2015-08-28 12:07
375 查看
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。
原文:http://blog.csdn.net/hongchangfirst/article/details/26004335
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。
原文:http://blog.csdn.net/hongchangfirst/article/details/26004335
相关文章推荐
- Gartner报告:多数CIO还未对数字化做好准备
- iOS设计模式 - 单例
- jquery实现超简洁的TAB选项卡效果代码
- JavaScript模块化学习基础
- POJ2836--Rectangular Covering
- 百度地图经纬度转换到腾讯地图/Google 对应的经纬度
- C中的继承和多态
- Html中px与em
- 【Leetcode】【Hard】Merge k Sorted Lists
- Git版本控制:Git冲突解决 相关错误总结
- 九度OJ 题目1080:进制转换
- Java map list 解决复杂表格的数据问题
- 关于InetAddress类确定特殊IP地址简介
- Git相关错误总结
- Docker资料整理
- Android之——史上最简单图片轮播广告效果实现
- 使用UIImageView播放图片
- 【java关键字-Interface】为什么接口中的属性和方法都默认为public
- 整理书签博客和文章
- J2EE-BaseService.java