进程字典与ets
2016-05-17 17:21
239 查看
进程字典是erlang游戏开发中最为常用的数据记录方式,理由很简单,因为它够快,差不多比ets快了一个数量级。但是,进程字典的数据为所在进程私有,无法跨进程直接get到进程字典的数据,而且,在进程被销毁时,进程字典的数据也会被回收。
再说下ets,对比进程字典,ets的适用场景是跨进程读写数据。遇到一个数据频繁被多个进程读到,就要考虑使用ets了。另外,ets有归属进程,但归属进程销毁时,ets的数据就会被系统回收。
对比进程字典和ets的实现,区别如下:
1. 锁方面,进程字典为无锁操作,ets是读写锁
2. 数据方面,进程字典数据在进程中,查询没有多余的复制操作;而ets,因为数据不在进程中,查询时会复制一份到进程。
所以,进程字典通常是最优先的选择。假如玩家的数据是存储在mnesia,特别是玩家的核心数据,就有必要从mnesia读到放在进程字典中。前面讲到了mnesia是利用ets和dets实现的,玩家上线时将核心数据读到进程字典,这样,读写都在进程字典,就可以利用进程字典带来的性能提升。这个提升是很可观,毕竟快了一个数量级。
前面提到了ets归属进程销毁时,ets数据也会被回收?
那么如果预防数据丢失的问题,ets也提供了方法,通过设置继承者进程就可以了。
ets:new(person, [named_table, {heir, HeirPid, HeirData}])
当归属进程崩溃时,继承者进程就会收到信息 {'ETS-TRANSFER', Tid, FromPid, HeirData},并且,ets的归属权就会转交到继承者进程。
再说下ets,对比进程字典,ets的适用场景是跨进程读写数据。遇到一个数据频繁被多个进程读到,就要考虑使用ets了。另外,ets有归属进程,但归属进程销毁时,ets的数据就会被系统回收。
对比进程字典和ets的实现,区别如下:
1. 锁方面,进程字典为无锁操作,ets是读写锁
2. 数据方面,进程字典数据在进程中,查询没有多余的复制操作;而ets,因为数据不在进程中,查询时会复制一份到进程。
所以,进程字典通常是最优先的选择。假如玩家的数据是存储在mnesia,特别是玩家的核心数据,就有必要从mnesia读到放在进程字典中。前面讲到了mnesia是利用ets和dets实现的,玩家上线时将核心数据读到进程字典,这样,读写都在进程字典,就可以利用进程字典带来的性能提升。这个提升是很可观,毕竟快了一个数量级。
前面提到了ets归属进程销毁时,ets数据也会被回收?
那么如果预防数据丢失的问题,ets也提供了方法,通过设置继承者进程就可以了。
ets:new(person, [named_table, {heir, HeirPid, HeirData}])
当归属进程崩溃时,继承者进程就会收到信息 {'ETS-TRANSFER', Tid, FromPid, HeirData},并且,ets的归属权就会转交到继承者进程。
相关文章推荐
- 2016-百度之星-资格赛-Problem C【字典树】
- Unreal Cook Book:动态改变材质的颜色等参数
- 高效排序算法(希尔排序)
- 高效排序算法(快排序)
- 零编程开发管理软件,提高效率,缩短开发周期
- php+nginx搭建
- 朴素贝叶斯分类
- Android Studio项目结构&AS构建基础
- Json Web Token身份认证
- 【数据库】基础知识总结
- Codeforces Round #353 (Div. 2)题解
- 【转】SIFT特征提取分析
- [转]如何成为主管
- mate 8、荣耀6,手机连接eclipse、AS调试应用没有log输出
- JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
- AndroidTV桌面BriskTVLanucher
- 二叉查找树(AVL)插入算法Java实现
- Android中进程和线程
- 一个简单的递归算法的思考
- hibernate相关问题