乐观悲观有内涵概念和外延概念两类
我先说内涵概念
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框架中的应用,以及它们各自的优缺点。 首先,让我们从乐观锁开始了解。乐观锁机制假设多个事务在处理数据时很少发生冲突...
首先,我们要理解“乐观”与“悲观”的基本概念。乐观主义者通常对未来持积极态度,相信困难最终会过去,事情会朝着好的方向发展。他们倾向于看到事物的积极面,即使面对挫折也能够保持希望。而悲观主义者则相反,...
主要分为两种类型:乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)。 **悲观锁(Pessimistic Locking)** 悲观锁假设数据在任何时候都可能发生并发冲突,因此在数据读取时就对其进行锁定,确保在...
介绍数据库事务的定义和事务带来的问题,详细讲解乐观锁与悲观锁的区别
**Hibernate**作为一种流行的Java持久层框架,提供了多种机制来处理并发控制问题,其中最常用的就是**乐观锁**和**悲观锁**。本文将详细介绍这两种锁的原理、应用场景以及如何在Hibernate中实现。 #### 二、悲观锁...
悲观锁和乐观锁是计算机科学中用于处理并发控制的两种不同策略,它们主要应用于多线程环境下数据的一致性和完整性保护。两种锁的设计哲学反映了对数据并发访问时的不同预期。 **悲观锁**: - **定义**:悲观锁是一...
悲观锁和乐观锁是两种常见的锁定策略,它们各有特点,适用于不同的场景。 **悲观锁**(Pessimistic Lock)的名字来源于其悲观的态度,它认为数据随时可能被其他事务修改,因此在读取数据时就立即进行加锁,防止其他...
简单的不确定型决策问题的四种主要决策准则,输入矩阵可从txt输入
悲观锁和乐观锁各有优缺点,选择哪种锁机制取决于具体的应用场景和需求。悲观锁适合数据修改频繁且对数据一致性要求较高的场景;而乐观锁适用于数据修改较少且并发量较大的场景。在实际应用中,可以根据具体情况灵活...
在Hibernate中,可以使用`@Version`注解来实现乐观锁,该注解会在实体类的一个属性上添加版本字段,每次更新时,Hibernate会比较当前版本号和数据库中的版本号,如果不同,则认为有并发冲突,更新失败。乐观锁的优点...
在多线程环境下,为了保证数据的一致性和完整性,数据库管理系统提供了多种锁定机制,其中乐观锁和悲观锁是两种常见的实现方式。 1. **悲观锁**:悲观锁假设数据在操作过程中可能会被其他并发事务修改,因此在读取...
本文主要讨论的是Hibernate框架中两种锁机制的使用:乐观锁和悲观锁。 首先,让我们深入理解悲观锁(Pessimistic Locking)。悲观锁正如其名字所示,假设并发环境中数据会被频繁修改,所以在整个数据处理过程中,它...
并发控制—悲观锁和乐观锁
在Java的持久化框架Hibernate中,悲观锁和乐观锁是两种重要的并发控制策略,它们用于管理数据库中的数据在多线程环境下的访问安全。本文将深入探讨这两种锁机制的原理、应用场景及其区别。 首先,我们来理解悲观锁...
悲观锁和乐观锁是并发编程中的核心概念,它们主要用于解决多线程环境中的数据竞争问题,以确保共享资源的安全访问。 1. **悲观锁**: 悲观锁采取保守策略,假设每次访问数据时都会出现并发冲突,因此在读取数据时...