补全:一把大锁拆成每键一把

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

本节的东西:

model(tasks)   时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细)
timed(fn, workers, work)   开 workers 条线程各跑 fn(work),交回耗时
coarse(work)   sleep(work) 关在锁里再改 total;fine(work)   sleep 在锁外,只把改关在锁里

一个计数字典,键之间互不相关。补全 Sharded:每个键一把锁(self.locks[key]),inc(key) 只拿那个键的锁做读-睡-写。四条线程各对自己的键加 10 次;和 Global(一把大锁)比:结果都对、Sharded 更快。

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论