让多个 Lua state 共享一份静态数据
浏览:1386次 出处信息
如果你在同一个进程里有多个 lua state , 它们需要共享大量的只读数据, 那么可能就不希望在每个 state 启动的时候都加载和解析一遍这些数据.
所以我们需要一个共享只读数据的方法。
前段时间,我实现了一个 共享内存服务 ,这个可以保证共享内存的安全读写。不过,如果数据是只读的,那么就不需要这么复杂了。
我们只需要把数据加载到一个 lua state 中,其它的同一进程内的 state 通过 C 接口去读数据就可以了。
今天,我做了简单的实现,放在了 github 上。
目前可以支持 nil number boolean function table 的数据交换。
function 交换有一些限制,不可以绑定 upvalue 。是用 string.dump 和 load 实现的。
table 类型返回的其实是一组 key ,需要继续用 get 来读取数据。
关于线程安全:我相信只是读一个 lua state 是线程安全的。但是目前 database.open 本身并不是线程安全的。如果两个线程同时调用 database.open ,将会导致构造出两个 database state 。如果是多线程使用,需要额外注意。
建议继续学习:
- Nginx与Lua (阅读:4671)
- Lua GC 的源码剖析 (2) (阅读:3889)
- Ameba , 一个简单的 lua 多线程实现 (阅读:3567)
- Lua GC 的源码剖析 (4) (阅读:3419)
- 使用 luajit 的 ffi 绑定 zeromq (阅读:3342)
- Proto Buffers in Lua (阅读:3131)
- Lua GC 的源码剖析 (1) (阅读:3057)
- 一个 Lua 内存泄露检查工具 (阅读:3015)
- Lua GC 的源码剖析 (6) 完结 (阅读:2597)
- Lua GC 的源码剖析 (3) (阅读:2325)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:为你的博客制作一个安卓客户端
后一篇:一个简单的基于PhoneGap的开源微博客户端 >>
文章信息
- 作者:云风的 BLOG 来源: 云风的 BLOG
- 标签: Lua 静态数据
- 发布时间:2012-04-19 23:30:15
建议继续学习
近3天十大热文
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则