IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

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

云风的 BLOG 2012-04-19 23:30:15 累计浏览 2,058 次
本机暂存

    如果你在同一个进程里有多个 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. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. Nginx与Lua (累计阅读 5,672)
  2. Lua GC 的源码剖析 (2) (累计阅读 5,079)
  3. Ameba , 一个简单的 lua 多线程实现 (累计阅读 4,985)
  4. Lua GC 的源码剖析 (4) (累计阅读 4,776)
  5. Proto Buffers in Lua (累计阅读 4,404)
  6. Lua GC 的源码剖析 (1) (累计阅读 4,390)
  7. 一个 Lua 内存泄露检查工具 (累计阅读 4,011)
  8. Lua GC 的源码剖析 (6) 完结 (累计阅读 3,929)
  9. 回调还是消息队列 (累计阅读 3,898)
  10. RedBridge(redis的http接口) (累计阅读 3,860)