lua-conf 让配置信息在不同的 lua 虚拟机间共享

有时候我们的项目需要大量的配置表(尤其是网络游戏) 。因为主要用 lua 做开发,我们倾向于直接用 lua table 保存这些配置常量。

海量的数据有两个问题:

这些配置数据在运行期是不变的,但树型结构复杂,放在 lua 虚拟机内会生成大量的 gc object ,拖满 lua 的垃圾收集器。因为每次扫描都需要把所有配置数据都标记一遍。

在服务器端,我们使用 skynet 框架,会启动数千个 lua 虚拟机。如果每个虚拟机都加载一份配置信息,会带来大量的内存浪费。

基于这两点,我实现了 lua-conf 这个模块。它可以把一个 lua 表转换成一个 C 对象。在 lua 中得到的是一个lightuserdata (不是 userdata ,也不能自动回收,这是因为我希望它可以被多个 lua state 共享)。

经过简单的包装,可以在语法上模拟 lua table 来访问它。weaktable 用来 cache 常用的配置数据项。

这个 C 对象的访问是线程安全的,所以你可以放心的在多线程的多个 lua state 中共享访问它。


注:lua-conf 支持的数据类型是有限的。它必须是一个无环的树型结构。key 必须是整数(除了正整数,也支持 0 或负数)或字符串。而 value 必须是 boolean string number 或 table 。

::...
免责声明:
当前网页内容, 由 大妈 ZoomQuiet 使用工具: ScrapBook :: Firefox Extension 人工从互联网中收集并分享;
内容版权归原作者所有;
本人对内容的有效性/合法性不承担任何强制性责任.
若有不妥, 欢迎评注提醒:

或是邮件反馈可也:
askdama[AT]googlegroups.com


订阅 substack 体验古早写作:


点击注册~> 获得 100$ 体验券: DigitalOcean Referral Badge

关注公众号, 持续获得相关各种嗯哼:
zoomquiet


自怼圈/年度番新

DU22.4
关于 ~ DebugUself with DAMA ;-)
粤ICP备18025058号-1
公安备案号: 44049002000656 ...::