当前课程知识点:计算思维导论 > 第五章 数据库技术与数据管理 > 实验5-1:数据库设计与实现(PBL直播课) > 延伸学习:悲观锁和乐观锁
旺财和小强生活在一个网上商城的系统中, 是一对儿线程好基友。
星期一刚上班,旺财接到领导电话说,要把一个商品的库存减少20, 旺财不敢怠慢,赶快把库存取出来一看,哦,现在有1000个。
与此同时,小强也接到电话说要把同一商品的库存减少30, 他一看,哦,现在有1000个。
旺财计算出最新的库存值980, 保存!
小强也计算出最新的库存值970, 保存 !
旺财的数据被小强覆盖了!
领导一看,本来卖出了50个商品,现在库存只扣了30个,这样持续下去就天下大乱了。
旺财和小强, 各打二十大板, 长长记性!
小强说:“哥,要不我们还是想个办法吧,再这样下去要被打死的。”
旺财悲催地说: “这样, 以后我们每次访问库存之前,都要先加锁,加了锁,就禁止别人再进入访问,只能等待持有锁的人来释放。”
星期二, 领导让旺财再次把库存减少20 , 旺财这次万分小心,先把库存给锁住,然后慢慢修改。
小强也接到了把库存减少的指令, 但是旺财哥已经把库存锁住了, 不能操作,小强只好去阻塞车间喝茶聊天,然后到就绪车间等待调度运行。
好不容易等到可以再次执行了,小强一看,这库存怎么还锁着呢!? 只好再次去阻塞车间喝茶。
领导一看, 小强你怎么回事, 老是喝茶聊天? ! 还干不干活了?
小强争辩说旺财哥一直锁着库存,我没法操作。
领导不管这些, 把小强和旺财又打了二十大板。
(备注: 这种加锁的方式就是悲观锁了,悲观锁正如其名,每次取读写数据时候总认为数据会被别人修改,所以将数据加锁,置于锁定状态, 不让别人再访问。缺点是如果持有锁的时间太长,其他用户需要等待很长时间。)
旺财说: “兄弟,这一次哥对不住你啊,处理得慢了一些, 不过哥刚才挨打的时候想了一个好办法:乐观锁。”
小强说:“拉倒吧你,屁股都快被打烂了还乐观?”
“你听我说嘛, 我们在那个库存字段的旁边,再加上一个版本(version)的字段, 例如刚开始的时候(库存= 1000, 版本=1), 每次你去读的时候不仅要读出库存,还要读出版本号, 等到你修改了库存,往回写的时候一定要检查一下版本号,看看和你读的时候是否一样。”
“如果不一样呢?” 小强问
“那就放弃这次写的操作,重新读取库存和版本号, 重新来过。”
“如果一样呢? ”
“那就放心大胆地把新的库存值写回去。把版本号也加1”
“我似乎有点明白了,我们试试,不过你要想好,我可不想再挨板子了。”
星期三, 旺财奉命把库存减去30, 他先读到了(库存= 1000, 版本=1); 小强也要改库存了,他要把库存减去50, 于是他也读到了(库存= 1000, 版本=1)。
旺财计算出新的库存值970 ,写回成功,现在版本变成了(库存= 970, 版本=2)。
小强也计算出新库存950 , 也准备写回,他战战兢兢地去看最新的版本号, 已经变成版本2了, 按照之前的约定,只好重新读取了。
小强再次读取(库存= 970, 版本=2) , 计算出最新缓存值920(970减去50), 再次试图更新,没想到又被别人抢了先,现在版本号已经变成3了 ,最新的数据是(库存= 900, 版本= 3)。
唉, 只好重新来过, 计算出最新缓存值850(900减去50),第三次终于更新成功了, 最新的库存是 (库存=850, 版本= 4)
领导看到旺财和小强忙得热火朝天,一刻不停,并且库存值也没有乱掉, 满意地点了点头:好同志啊。
(备注: 这种方式就是所谓的乐观锁了,旺财和小强这次乐观了一点,觉得一般情况下不会有太多人修改库存,所以没有加锁,放心地去操作,只有在最后更新的时候才去看是否冲突。 这种方式适合于冲突不多的场景,如果冲突很多,数据争用激烈,会导致不断地尝试,反而降低了性能。)
两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。
-1.1 计算与计算思维1
--计算与计算思维1
--图文教学
--1-1 巩固练习--作业
-1.2 计算与计算思维2
--计算与计算思维2
--图文教学
--1-2 巩固练习--作业
-1.3 计算工具与计算机
--计算工具与计算机
--图文教学
--什么是摩尔定律?
--1-3 巩固练习--作业
-实验1-1 初识计算思维
--计算机发展简史
--这才是大学
--实验1-1 初识计算思维
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-2.1 初识二进制
--初识二进制
--图文教学
--2-1 巩固练习--作业
-2.2 二进制的运算
--二进制的运算
--图文教学
--2-2 巩固练习--作业
-2.3 数制转换
--数制转换
--常见进制
--图文教学
--数制转换口诀
--2-3 巩固练习--作业
-2.4 数的表示
--数的表示
--图文教学
--负数补码问题
--2-4 巩固练习--作业
-2.5 字符编码
--字符编码
--图文教学
--汉字编码问题
--2-5 巩固练习--作业
-2.6 声音图像编码
--声音图像编码
--延伸学习:小趣闻
--图文教学
--2-6 巩固练习--作业
-本章小结
--知识点回顾
--习题与解析
--本章测验--作业
-3.1 计算机系统构成
--计算机系统构成
--图文教学
--3-1 巩固练习--作业
-3.2 主板
--主板
--图文教学
--主板的作用
--3-2 巩固练习--作业
-3.3 接口与总线
--接口与总线
--图文教学
--总线和接口的区别
--3-3 巩固练习--作业
-3.4 CPU
--CPU
--延伸学习:从沙子到CPU的制造过程告诉你造芯片到底有多难
--图文教学
--什么是主频?
--3-4 巩固练习--作业
-3.5 内存
--内存
--图文教学
--主流内存类型
--3-5 巩固练习--作业
-3.6 外存
--外存
--图文教学
--硬盘类型
--3-6 巩固练习--作业
-3.7 输入输出设备
--输入输出设备
--图文教学
--微机故障检测
--I/O设备
--3-7 巩固练习--作业
-3.8 计算机工作原理
--计算机工作原理
--图文教学
--人类与计算机
--3-8 巩固练习--作业
-3.9 操作系统1
--图文教学
--虚拟内存?
--3-9 巩固练习--作业
-3.10 操作系统2
--图文教学
--操作系统
--3-10 巩固练习--作业
-实验3-1 计算机原理与硬件组装
--上机实验3-1:计算机工作原理与硬件组装
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-4.1 初识网络
--初识网络
--图文教学
--4.1 巩固练习--作业
-4.2 网络分类
--网络分类
--图文教学
--校园网
--4.2 巩固练习--作业
-4.3 网络体系结构
--网络体系结构
--图文教学
--4.3 巩固练习--作业
-实验4-1:简单网络布线
-4.4 网络设备
--网络设备
--图文教学
--4.4 巩固练习--作业
-实验4-2:将计算机添加到现有网络中
-4.5 局域网搭建
--局域网搭建
--图文教学
--4.5 巩固练习--作业
-实验4-3 无线路由器连接与设置
-4.6 IP与域名系统
--IP与域名系统
--图文教学
--4.6 巩固练习--作业
-实验4-4:测试无线连接
-4.7 划分子网
--划分子网
--图文教学
--子网掩码
--4.7 巩固练习--作业
-4.8 Internet 服务
--工信部部长谈5G
--图文教学
--4.8 巩固练习--作业
-4.9 数字公民与网络安全
--图文教学
--数字签名
--4.9 巩固练习--作业
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-5.1 数据库基本概念
--数据库基本概念
--图文教学
--5.1 巩固练习--作业
-5.2 数据库的设计方法
--图文教学
--数据库的设计步骤
--5.2 巩固练习--作业
-5.3 数据库的规范化设计1
--图文教学
--为什么要规范化数据库设计?如果不规范化设计会有什么问题?
--5.3 巩固练习--作业
-5.4 数据库的规范化设计2
--图文教学
--规范化设计数据库
--5.4 巩固练习--作业
-5.5 ACCESS数据库的创建与查询
--图文教学
--主键与外键
--5.5 巩固练习--作业
-5.6 关系代数理论
--关系代数理论
--图文教学
--5.6 巩固练习--作业
-5.7 SQL语句查询
--SQL语句查询
--图文教学
--5.7 巩固练习--作业
-实验5-1:数据库设计与实现(PBL直播课)
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-6.1 逻辑思维及其训练方法
--图文教学
--白马非马论
--6-1 巩固练习--作业
-6.2 命题及命题判断
--命题及命题判断
--图文教学
--命题判断条件
--6.2 巩固练习--作业
-6.3 命题符号化
--命题符号化
--图文教学
--蕴含运算符
--6-3 巩固练习--作业
-6.4 布尔代数与真值表
--布尔代数与真值表
--图文教学
--构造真值表
--6-4 巩固练习--作业
-6.5 命题演算和逻辑推理
--图文教学
--永真式和永假式
--6-5 巩固练习--作业
-实验6-1:用真值表进行逻辑推理(PBL录屏课)
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-7.1 什么是问题求解
--什么是问题求解
--图文教学
--7-1 巩固练习--作业
-7.2 算法与算法描述
--算法与算法描述
--图文教学
--算法描述方法
--7-2 巩固练习--作业
-7.3 顺序结构设计
--顺序结构设计
--图文教学
--温度转换问题
--7-3 巩固练习--作业
-7.4 选择结构设计
--选择结构设计
--图文教学
--7-4 巩固练习--作业
-7.5 循环结构设计
--循环结构设计
--图文教学
--7-5 巩固练习--作业
-7.6 算法策略基础之数组
--图文教学
--7.6 巩固练习--作业
-7.7 算法策略基础之函数
--图文教学
--用户自定义函数
--7.7 巩固练习--作业
-实验7-1:Raptor的基本操作(PBL录屏课)
-7.8 算法策略之枚举法
--算法策略之枚举法
--图文教学
--7-8 巩固练习--作业
-7.9 算法策略之递归法
--算法策略之递归法
--图文教学
--德罗斯特效应
--7.9 巩固练习--作业
-7.10 算法策略之递推法
--算法策略之递推法
--图文教学
--7-10 巩固练习--作业
-7.11 算法策略之迭代法
--算法策略之迭代法
--图文教学
--7-11 巩固练习--作业
-实验7-2:算法设计与分析(PBL直播课)
-7.12 算法策略之分治法
--算法策略之分治法
--图文教学
--分治法思想
--7-12 巩固练习--作业
-7.13 算法策略之动态规划
--图文教学
--什么是动态规划?
--7-13 巩固练习--作业
-7.14 算法策略之贪心算法
--图文教学
--贪心策略
--7.14 巩固练习--作业
-7.15 算法策略之回溯法
--算法策略之回溯法
--图文教学
--回溯现象
--7-15 巩固练习--作业
-7.16 算法策略之查找算法
--图文教学
--7-16 巩固练习--作业
-7.17 算法策略之排序算法
--图文教学
--冒泡排序
--7-17 巩固练习--作业
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-8.1 数据挖掘概述
--数据挖掘概述
--图文教学
--数据挖掘案例
--8-1 巩固练习--作业
-8.2 数据采集
--数据采集
--图文教学
--数据采集
--8-2 巩固练习--作业
-8.3 数据探索之数据质量分析
--图文教学
--异常值处理
--8-3 巩固练习--作业
-8.4 数据探索之数据特征分析
--图文教学
--帕累托法则
--8-4 巩固练习--作业
-8.5 数据特征分析之分布分析
--图文教学
--分组方法
--8-5 巩固练习--作业
-8.6 数据特征分析之统计分析
--图文教程
--加权平均数
--8-6 巩固练习--作业
-8.7 数据特征分析之统计分析(续)
--图文教学
--无量纲数
--8-7 巩固练习--作业
-8.8 数据预处理
--数据预处理
--图文教学
--数据预处理
--8-8 巩固练习--作业
-8.9 数据挖掘之分类
--数据挖掘之分类
--图文教学
--8-9 巩固练习--作业
-8.10 数据挖掘之预测
--数据挖掘之预测
--图文教学
--分类与预测
--8-10 巩固练习--作业
-8.11 数据挖掘之聚类分析
--图文教学
--聚类和分类
--8-11 巩固练习--作业
-8.12 数据挖掘之关联规则
--图文教学
--智能推荐系统
--8-12 巩固练习--作业
-本章小结
--知识点回顾
--习题与解析
--章节自测--作业
-期中考试(1-4章)
-期末考试(5-8章)





