交付:慢的和错的都修,写报告
场景:~/统计/统计.py(锁太粗,两秒)和 ~/库存/库存.py(锁太细,超卖)都要交付修好的版本。 任务:统计.py 改到 1.3 秒内、合计 30;库存.py 改到每次卖出正确;再写 ~/报告.
谁持锁最久
场景:~/持锁.txt 是给临界区计时之后一次运行的日志,每行「线程 名字 持锁 X 毫秒」,最后一行是总耗时。对照表列了八个名字。 任务:找出持锁最久的那条线程,到对照表里查它的名字对应的标记。 可
三个版本哪个又对又快
场景:~/版本/ 三个卖货脚本,每个打印「卖出 K 耗时 T」。一个锁太粗、一个太细、一个刚好。对照表列了八个文件名。 任务:把三个都跑一遍,找出结果正确而且最快的那个,到对照表里查它的文件名对应的标
一把大锁拆成每键一把
场景:~/计数/计数.py 四个键各一条线程,各加几次(读-睡-写)。一把大锁保护整个字典——四条线程改的是不同的键,却在同一把锁上排队。 任务:改成每个键一把自己的锁(锁分片),让它 1.1 秒内跑
把检查和动作合回一次持锁
场景:同上的 ~/库存/库存.py,超卖。说明.txt 写了库存数。 任务:把拆开的函数合回「检查和动作在同一次持锁里」,让它每次都打印正确的「卖出 S」。规则:不许删 sleep、不许改库存和买家数
哪个函数把检查和动作拆开了
场景:~/库存/库存.py 三个碰库存的函数都是「先检查、再动作」。有一个把检查和动作拆成了两次持锁——跑起来超卖。对照表列了八个名字。 任务:找出那个函数,到对照表里查它的名字对应的标记。 可操作范
把耗时的活挪出锁
场景:同上的 ~/统计/统计.py,四条线程各算 0.5 秒,要跑两秒。 任务:改成「算在锁外、只把加进合计关在锁里」,让它 1.3 秒内跑完、合计还是 30。规则:不许删锁、不许改 WORK、不许少
锁里那个耗时的函数
场景:~/统计/统计.py 开四条线程各算一项、加进合计,结果对,可是要跑两秒。对照表列了八个名字。 任务:找出被关在锁里、其实不碰共享数据的那个耗时函数,到对照表里查它的名字对应的标记。 可操作范围
从耗时认粗细
三个版本各打印「卖出 K 耗时 T」,库存 2。用规则「结果对且最快 = 刚好;结果对但慢 = 太粗;结果错 = 太细」分类: runs = {"甲": (2, 1.21), &q
先量什么
怀疑一个多线程程序「锁太粗」,真机上第一步该量的是【0】。