请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

一个关于 expunged 标记的疑问

为什么在 dirty 复制 read 值的时候,遇到 entry 指向 nil 的时候要标记为 entry,而不是直接忽略就是了呢?这样下一次 read 继承 dirty 的时候,这个 entry 对应的 key 不是自然就不在了吗。

个人思考:
近期删除的 key 再次被存入可能性比较高(时间局部性?),让它暂时保存在 read 中有利于提高 read 的命中率从而提高读写效率。

想知道我的想法是否是正确的?

正在回答

1回答

我觉得主要就是标记一下,下面的dirty没有这个key,如果遇到重新插入的情况,要在下面的dirty也插入这个key,否则dirty提升之后会丢失key。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕仔9573397 #1
    那为什么不只用 nil 标记就好了呢?只要 read 中重新插入的 key 对应的 entry 为 nil,就在 dirty 上新建一个 key。
    回复 有任何疑惑可以回复我~ 2022-07-28 18:03:00
  • Moody 回复 提问者 慕仔9573397 #2
    只用nil的话,没办法区分dirty里面有没有这个key吧,还要去dirty里查询一下。毕竟普通的删除时,也是写nil。
    回复 有任何疑惑可以回复我~ 2022-07-28 18:18:45
  • 提问者 慕仔9573397 回复 Moody #3
    谢谢老师
    回复 有任何疑惑可以回复我~ 2022-07-29 16:08:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信