时间图
可变的数据。哈希图
-类似结构,其中每个实体都被隐式索引到他们最后修改的时间。适用于键控缓存。
用法
导入合格数据。TimeMap作为TM进口管制。同时发生的。STM公司主::IO()main=做--创建新的空引用mapRef<-原子TM.newTimeMap--在映射中插入新的键/值对。请注意--`someKey`应实现`Hashable`。这也是--将值的创建时间设置为“现在”。TM.insert someKey 0地图参考--将“someKey”的值调整为“1”。请注意--还将值的创建时间重置为“现在”。TM.adjust(+1)someKey映射参考--等一下线程延迟1000000--删除所有早于1秒的值。原子$TM.filterFromNow 1 mapRef--将返回`Nothing`原子$TM.lookup someKey mapRef返回()
它是如何工作的
有两个内部映射TimeMap k时间映射ka
以下为:
- “时间索引”地图参考:
TVar(映射UTC时间(哈希集k))
- 可变值映射:
STM集装箱。地图。映射k(UTC时间,a)
插入
插入新值时,首先对哈希表执行查找,以查看键已存在:
- 如果没有,请将当前时间和元素插入可变映射。然后,插入钥匙作为值,并且时间作为进入的关键时间索引多重映射。
- 如果是,请在做与第一颗子弹相同的事情。
查找
这不需要创建新数据,因此不需要完整数据IO(输入输出)
它所做的就是在可变映射中查找键。
过滤
要筛选出所有早于某个时间的条目,必须使用数据。地图.split查找
函数将时间索引多重映射拆分为要从中删除的条目主容器和要保留的容器。你只是写入变量
你想要的地图要保留,但对于要删除的,您需要获取所有元素
属于那张地图。然后,对于每个需要删除的键,我们从主容器。令人惊讶的是,无论地图的大小。
如何运行测试
烟囱试验
基准
stack bench--benchmark-arguments=“--output profile.html”
您也可以在我的方框中查看结果在这里.