ETS 笔记

来源:互联网 发布:麻将游戏服务端源码 编辑:程序博客网 时间:2024/05/20 21:43

ets note:
1. ets 是一张进程间可以共享的表 (pubic)
2. ets 并不在gc的范围内
3. 如果创建的进程死亡, 数据也会 消失。 可以通过give_away 和 hire 来使得 ets不会随着创建进程的消亡而消亡。
4. 每个对象在查看和插入 的时候,都会导致对象的拷贝
5. ‘$end_of_table’ 不能被用作是key
6. set、 bag、dublicate_bag 的key 匹配是 match, 相当于 =:=, order_set 的key 匹配是equal, 相当于 == ( 没有规定 1.0 和 1的 大小关系)

ets function note:
1. fun2ms(literalFun) -> MatchSpec
词法转化器, 其中literFun 不能有 if, case , receive 等作为语法元素
2. ets: mach_spec_compile(MatchSpec) -> compiledMatchSpec
函数转化为一个 ets:match_spec_run/2 的内部形式, 非传递的, 也就是说不能转化为外部形式, 然后在进程间传递
3. ets:is_compile_ms 该函数用来检测一个已经编译的匹配描述是否是有效的。
4. give_away 实验
创建进程死亡, ets 也消失
这里写图片描述
A(现在ets的拥有者) give_away ets 给 B, 杀死A, 发现ets 没有消失; 在杀死B, 发现ets
消失:
这里写图片描述