时间模型
本节的东西:
model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细)
timed(fn, workers, work) 开 workers 条线程各跑 fn(work),交回耗时
coarse(work) sleep(work) 关在锁里再改 total;fine(work) sleep 在锁外,只把改关在锁里三条线程各「算 3 秒、改 1 秒」,四条线程各「算 5、改 1」,看粗锁和细锁的总时间:
def model(tasks):
"""tasks: 每条线程 (算, 改) 两段耗时。粗锁:全串行 = Σ(算+改);细锁:算并行、改串行 = max(算) + Σ改。交回 (粗, 细)。"""
coarse = sum(a + b for a, b in tasks)
fine = max(a for a, b in tasks) + sum(b for a, b in tasks)
return coarse, fine
print((str(model([(3, 1)] * 3)) + "/" + str(model([(5, 1)] * 4))).replace(" ", ""))
全部评论