乐观悲观有内涵概念和外延概念两类
我先说内涵概念
cpu是时分复用的
也就是把cpu切片,一片给一个thread/process
片与片之间,需要进行cpu切换
切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据
这个操作必然的会有一定代价
这个一般叫状态切换,碰到需要等待的,就切换出去,到blocking队列,然后等条件具备了,在通过notify()。notifyAll()唤醒回来
那么,悲观锁,其实就是要经过这个过程的锁
在某个资源不可用的时候,就将cpu让出,把当前等待线程切换为blocking状态
等到资源(比如一个共享数据)可用了,那么就将线程唤醒,让他进入runnable状态
等待cpu调度
那么 可以看到,如果一个资源占用时间很短,那么你第一次看,可能这个资源被占用,但当你花费100000个周期切换到blocking的时候,可能立刻就发现自己被唤醒了,于是再花费100000个周期回来抢锁
这个代价明显就高了
于是就产生了乐观锁的概念,他的核心思路就是,我不让出cpu,我while循环1000次,每次2个时钟周期,那么总共我花费了2000个时钟周期,可能就能拿到这个资源
#概数核心是比,你们要分清主次矛盾#
于是,当数据争用不严重,或者入锁处理出锁比较快的时候,乐观锁往往会有更好地效果
内涵概念讲解完毕,再看外延概念
可能由于网络原因,"可以看到,乐观锁的核心是不让出,通过while(true)循环的方式来判断当前锁状况,于是就引申一下, 在各类分布式系统中,“判断某个数据是否能访问,不能访问立刻返回false",通过循环来获得某个资源的访问权限的过程,都被叫做乐观锁了"的消息发送失败。
可能由于网络原因,"对应到Java实现,那么可以认为 tryLock接口是乐观锁实现中的原子接口"的消息发送失败。
有这个外延的原因是,他们实现的方式都一样,类似
while(true)
{
tryLock() == true?
{
do sth.
}
}
分享到:
相关推荐
主要介绍了thinkPHP框架乐观锁和悲观锁,结合实例形式分析了框架乐观锁和悲观锁的原理及thinkPHP相关实现技巧,需要的朋友可以参考下
在实际的多用户并发访问的生产环境里边,我们经常要尽可能的保持数据的一致性。...解决这样的办法,SQL SERVER提出了乐观锁定和悲观锁定的概念,本文以一个实例来说明如何使用乐观锁定和悲观锁定来解决这样的问题。
介绍数据库事务的定义和事务带来的问题,详细讲解乐观锁与悲观锁的区别
摘要概念是知识表示的基本认知单元,它由外延和内涵两部分构成由于概念的外延与内涵可以相互诱导,所概念的外延和内涵中一旦有一个被确定下来,那么这个概念也就随之确定,概念认知是将属于这一概念的特征鳳性筛选出来,...
详细介绍了Oracle中乐观锁、悲观锁的原理及应用,并有实例
Hibernate乐观锁和悲观锁分析,针对在使用HIBERNATE时怎么配置乐观锁进行了详细的范例讲解
Hibernate的乐观锁与悲观锁的文档,帮助学习Hibernate的乐观锁与悲观锁,让你们学得更轻松。
简单的不确定型决策问题的四种主要决策准则,输入矩阵可从txt输入
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部 系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状 态。悲观锁的实现,往往依靠数据库提供的锁机制...
Java 中的悲观锁和乐观锁的实现 纯开发技巧。
并发控制—悲观锁和乐观锁
面试必备之乐观锁与悲观锁.pdf
[数据库事务与锁]详解七 深入理解乐观锁与悲观锁
英语演讲ppt和演讲稿
然后讨论处理乐观锁的3种方法,乐观锁不能从根源上解决并发问题,因此后面我们介绍了悲观锁,最后介绍隔离级别如何帮助我们实现悲观锁,每个隔离级别都列举了示例进行说明,使得概念更加清晰。 我们为什么需要锁? ...
optimistic-lock 属性有如下可选取值: none:无乐观锁 version:通过版本机制实现乐观锁 dirty:通过检查发生变动过的属性实现乐观锁 all:通过检查所有属性实现乐观锁 其中通过 version 实现的乐观锁机制是 ...
所谓乐观锁,重视假设最好的情况,每次去拿数据都认为别人不会修改,所以不会上锁,但是会在更新时判断一下在此期间这个数据有没有更改,使用版本号机制和CAS算法实现,乐观锁适用于多读的应用类型,这样可以提高...
hibernate的乐观锁和悲观锁,两种锁搞定一切
p278 - p288 乐观锁和悲观锁
悲观锁和乐观锁的技术对比和应用.docx