我有一个脚本 1) 经常运行 2) 由许多不同的进程运行并且 3) 需要很长时间。
更新:需要很长时间的东西是测试谁的结果对于每个过程都是一样的。完全多余。
我认为是时候做一些缓存了,但我担心种族、冲突、腐败、时间漩涡不稳定和鸡的可能性。
复杂性是因为任何进程都可以更新缓存以及读取缓存,所以我必须知道如何处理所有这些组合。
在我看来,这闻起来像是比我更聪明、受过更多教育的人可能已经想出来的东西。
无论如何,为了使这个问题更具体,这就是我到目前为止的想法。我在脑海中使用羊群,不确定这是否是个好主意。
- 如果缓存是新鲜的,请阅读并离开
- 如果缓存过时
- 尝试获得写锁
- 如果我得到锁,请进行测试并更新缓存
- 如果我没有得到锁,其他人有写锁还是读锁?
- 如果它是共享的,为什么他们要读取陈旧的缓存?我是否忽略它们,进行测试并更新缓存(或者这可能导致它们读取一半写入的缓存......呃......)
- 如果是独占的,请给他们一点时间来完成测试并更新缓存。
- 尝试获得写锁
希望这是有道理的...