当前位置: 首页 > news >正文

锁分类

乐观锁 悲观锁
   悲观锁假定其他用户企图访问或者改变你正在访问、更改的对象的概率是很高的,因此在悲观锁的环境中,在你开始改变此对象之前就将该对象锁住,并且直到你提交了所作的更改之后才释放锁。悲观的缺陷是不论是页锁还是行锁,加锁的时间可能会很长,这样可能会长时间的限制其他用户的访问,也就是说悲观锁的并发访问性不好。与悲观锁相反,乐观锁则认为其他用户企图改变你正在更改的对象的概率是很小的,因此乐观锁直到你准备提交所作的更改时才将对象锁住,当你读取以及改变该对象时并不加锁。可见乐观锁加锁的时间要比悲观锁短,乐观锁可以用较大的锁粒度获得较好的并发访问性能。但是如果第二个用户恰好在第一个用户提交更改之前读取了该对象,那么当他完成了自己的更改进行提交时,数据库就会发现该对象已经变化了,这样,第二个用户不得不重新读取该对象并作出更改。这说明在乐观锁环境中,会增加并发用户读取对象的次数。
从数据库厂商的角度看,使用乐观的页锁是比较好的,尤其在影响很多行的批量操作中可以放比较少的锁,从而降低对资源的需求提高数据库的性能。再考虑聚集索引。在数据库中记录是按照聚集索引的物理顺序存放的。如果使用页锁,当两个用户同时访问更改位于同一数据页上的相邻两行时,其中一个用户必须等待另一个用户释放锁,这会明显地降低系统的性能。interbase和大多数关系数据库一样,采用的是乐观锁,而且读锁是共享的,写锁是排他的。可以在一个读锁上再放置读锁,但不能再放置写锁;你不能在写锁上再放置任何锁。锁是目前解决多用户并发访问的有效手段
公平锁和非公平锁
     如果获取一个锁是按照请求的顺序得到的,那么就是公平锁,否则就是非公平锁。

在没有深入了解内部机制及实现之前,先了解下为什么会存在公平锁和非公平锁。公平锁保证一个阻塞的线程最终能够获得锁,因为是有序的,所以总是可以按照请求的顺序获得锁。不公平锁意味着后请求锁的线程可能在其前面排列的休眠线程恢复前拿到锁,这样就有可能提高并发的性能。这是因为通常情况下挂起的线程重新开始与它真正开始运行,二者之间会产生严重的延时。因此非公平锁就可以利用这段时间完成操作。这是非公平锁在某些时候比公平锁性能要好的原因之一

转载于:https://www.cnblogs.com/burgeen/p/3618018.html

相关文章:

  • PXE 服务详解
  • 删除字符串中的空格
  • 反编译APK文件
  • 学习日记(一)----BaseActivity的写法
  • 【Android-View】点击侧滑菜单(SlidingMenu)按钮,更新主题内容时容易引发的内存问题解决方案...
  • MySQL正则表达式初步
  • ssh框架整合所需jar包
  • 【cocos2d-x从c++到js】21:使用CocosCode调试JSB
  • Linux下多线程下载工具 - Axel
  • 一个简单的css3 动画例子
  • 串的存储实现
  • java基础学习总结——多态(动态绑定)
  • sql 错误提示
  • java 数字金额大写转换
  • LDAP快速入门
  • [case10]使用RSQL实现端到端的动态查询
  • 【comparator, comparable】小总结
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • in typeof instanceof ===这些运算符有什么作用
  • iOS 系统授权开发
  • java8 Stream Pipelines 浅析
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Promise面试题2实现异步串行执行
  • webpack入门学习手记(二)
  • 服务器从安装到部署全过程(二)
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于List、List?、ListObject的区别
  • 回顾2016
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 试着探索高并发下的系统架构面貌
  • 通过git安装npm私有模块
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  •  一套莫尔斯电报听写、翻译系统
  • scrapy中间件源码分析及常用中间件大全
  • 说说我为什么看好Spring Cloud Alibaba
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #QT(一种朴素的计算器实现方法)
  • #数学建模# 线性规划问题的Matlab求解
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (第一天)包装对象、作用域、创建对象
  • (附源码)php新闻发布平台 毕业设计 141646
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Windows2003安全设置/维护
  • (转)树状数组
  • *2 echo、printf、mkdir命令的应用
  • .java 9 找不到符号_java找不到符号