coocood/freecache

有一点小问题想请教一下

zhaohailin111 opened this issue · 1 comments

1、请问这个consecutiveEvacuate值大于多少被淘汰是基于什么原理?

if expired || leastRecentUsed || consecutiveEvacuate > 5 {

2、请问这里更换成256个切片expand()时是否会表现的更好?

slotsData []entryPtr // shared by all 256 slots

我也提了一个issue关于set的时候为什么要将len(rb.data)/4,我猜这里跟我提的issue是有关联的。

  1. 因为set的时候保证了一组kv+head不会大于len(rb.data)/4,那么在淘汰的时候如果连续5个都没有清理出空间,很有可能会造成短时间内的无限循环(假设里面只有4组,而且每组kv+head=len(rb.data)/4)。
  2. 如果rb里面碎片在比较后面的话,Evacuate过程会比较费时。
    总结:首先确保不会hang住,才会加consecutiveEvacuate > 5这个逻辑,其次牺牲掉一些hit率,换取set的高效。这两点也只是我个人猜测,大牛们勿喷。

@zhaohailin111