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 。
Comments
Posted by: Cloud | (13) July 1, 2016 06:36 PM
Posted by: niqiu | (12) July 1, 2016 06:14 PM
Posted by: youngshall | (11) May 5, 2014 05:37 PM
Posted by: fh2002 | (10) April 10, 2014 05:05 PM
Posted by: Felix | (9) April 8, 2014 05:14 PM
Posted by: Cloud | (8) April 4, 2014 09:46 AM
Posted by: Atry | (7) April 4, 2014 09:33 AM
Posted by: Atry | (6) April 4, 2014 09:30 AM
Posted by: wesom | (5) April 2, 2014 08:51 PM
Posted by: wesom | (4) April 2, 2014 08:50 PM
Posted by: mos | (3) April 2, 2014 06:07 PM
Posted by: 土匪 | (2) April 2, 2014 06:06 PM
Posted by: shuax | (1) April 2, 2014 04:21 PM