技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 让多个 Lua state 共享一份静态数据

让多个 Lua state 共享一份静态数据

浏览:1404次  出处信息

    如果你在同一个进程里有多个 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 。如果是多线程使用,需要额外注意。

建议继续学习:

  1. Nginx与Lua    (阅读:4699)
  2. Lua GC 的源码剖析 (2)    (阅读:3915)
  3. Ameba , 一个简单的 lua 多线程实现    (阅读:3598)
  4. Lua GC 的源码剖析 (4)    (阅读:3449)
  5. 使用 luajit 的 ffi 绑定 zeromq    (阅读:3367)
  6. Proto Buffers in Lua    (阅读:3156)
  7. Lua GC 的源码剖析 (1)    (阅读:3083)
  8. 一个 Lua 内存泄露检查工具    (阅读:3044)
  9. Lua GC 的源码剖析 (6) 完结    (阅读:2640)
  10. Lua GC 的源码剖析 (3)    (阅读:2351)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1