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

面试题:谈谈你对乐观锁和悲观锁的理解?

乐观锁(Optimistic Locking)和悲观锁(Pessimistic Locking)是两种不同的并发控制策略,在数据库管理系统和多线程编程中广泛用于处理并发访问共享资源时的数据一致性问题。

悲观锁

  • 原理:悲观锁正如其名,对并发持悲观态度,认为在并发环境下数据被其他事务修改的概率较高,所以在进行任何数据操作前都会先获取锁,确保在事务执行过程中不会有其他事务对该数据进行修改。

  • 操作:当一个事务获取悲观锁后,其他试图修改同一数据的事务会被阻塞,直到持有锁的事务完成并释放锁。

  • 优点:提供了强一致性保证,简单易理解,适用于并发写入频繁且冲突可能性高的场景。

  • 缺点:可能导致大量的线程或事务等待,降低系统的并发性能,并可能引发死锁等问题。

乐观锁

  • 原理:乐观锁相对乐观,认为在大多数情况下,数据不会同时被多个事务修改,所以在读取数据时并不会立即加锁。它会在更新数据时检查在此期间数据是否已被他人修改。

  • 实现乐观锁的实现通常依赖于版本号或时间戳等机制,如在更新记录时验证版本号是否自上次读取以来未变,如果发现有变更,则认为存在并发修改,事务失败并可以重新尝试或报告给用户。

  • 操作:事务在提交更新时才检查是否存在冲突,如果没有冲突则更新成功,如果有冲突则采取相应策略,如重试或回滚事务。

  • 优点:在读取为主的场景下,能够提升系统的并发性能,减少锁带来的开销,尤其适用于冲突较少的环境。

  • 缺点:在高并发且冲突频繁的情况下,可能会增加大量无效的事务重试,导致性能下降。同时,设计和实现相对复杂一些,需要额外维护版本号或时间戳字段。

总结来说,选择使用哪种锁取决于具体的应用场景和并发情况。悲观锁更适合写操作密集且并发冲突概率较高的场景,而乐观锁更适用于读操作为主、并发冲突概率较低的场景。

相关文章:

  • 用链表实现的C语言队列
  • 行为树 Behavoir Tree入门教程|讲的最清晰的教程(大概)
  • 【介绍下R-tree,什么是R-tree?】
  • linux Ubuntu安装samba服务器与SSH远程登录
  • 基于构件开发模型-系统架构师(八)
  • 第一章 Docker入门
  • Mysql查询分析工具Explain的使用
  • Django里choices字段使用中文使用
  • 数据库索引推荐大PK,DBdoctor和资深DBA的终极较量
  • Hbase布隆过滤器
  • 手机丢失不惊慌,华为手机已升级至楼层级设备查找!
  • C++作业第四天
  • Handler通信机制
  • [论文笔记]Mixtral of Experts
  • 新版FMEA培训的应用误区是如何产生的?
  • [deviceone开发]-do_Webview的基本示例
  •  D - 粉碎叛乱F - 其他起义
  • Git同步原始仓库到Fork仓库中
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • java8 Stream Pipelines 浅析
  • Java教程_软件开发基础
  • Markdown 语法简单说明
  • MYSQL 的 IF 函数
  • Octave 入门
  • PAT A1017 优先队列
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • v-if和v-for连用出现的问题
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于 Babel 的 npm 包最小化设置
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 通过几道题目学习二叉搜索树
  • 延迟脚本的方式
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用Visual Studio开发以太坊智能合约
  • Nginx实现动静分离
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​zookeeper集群配置与启动
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​学习一下,什么是预包装食品?​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (2)空速传感器
  • (23)mysql中mysqldump备份数据库
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (补充)IDEA项目结构
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (函数)颠倒字符串顺序(C语言)
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)