克隆 Lua 状态。
2009-9-6 17:59:35
收藏:0
阅读:270
评论:4
伙计们,有没有办法克隆 Lua 状态?
在我的游戏应用程序中,Lua 虚拟机的初始化过程非常耗时(约 1 秒钟,因为多个脚本一次性加载)。我为每个自主代理人都创建了一个单独的 Lua 虚拟机,一旦代理人被创建,它的 Lua 初始化会严重影响 FPS。
我正在考虑以下方案:保留“预派生”的 Lua 状态,然后将其简单地克隆给每个代理。这可能吗?
原文链接 https://stackoverflow.com/questions/1383768
点赞
stackoverflow用户1836540
注意,适用于 Lua 5.2 及以上版本。
你可以限制对这个虚拟机的访问。创建一个实例,包含所有必要的函数,它不依赖于 _G(全局 Lua 状态),然后为每个客户端创建单独的表。他们将使用这些表作为他们的全局命名空间。通过 _ENV 可以将一个表设置为当前的 _G。这是一个相当难以在一个帖子中解释清楚的话题。简单来说,你需要为新客户端准备一个“虚拟”的 _G,然后只需要为客户端的代码替换 _G。这里是我建议你开始的地方。
以下是重点内容。
local _ENV = t --改变环境。如果没有 local,这将改变整个代码块的环境。
只需删除 local
,你就可以改变所有后续代码的 _ENV。祝你实验顺利!
P.S. 别忘了你可以为 _ENV 和 _G 表设置元表并禁止更改该元表。Lua 在这方面非常灵活。
2016-07-23 01:08:12
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你可以考虑为每个自治代理使用 Lua 的协程,而不是完全单独的虚拟机。协程是一种更轻量级的解决方案,但可能不适用于你的应用程序。
如果无法更改架构,可以尝试使用 LuaJIT。它可能可以使初始化速度足够快。
更多选项:
Rings:"Rings 是一个库,提供一种从 Lua 中创建新 Lua 状态的方法。它还提供了一种简单的方式来在创建者(主)状态和已创建的(从)状态之间进行通信。"
Pluto:"Pluto 是一个库,允许用户将“Lua 宇宙”的任意大部分写入平面文件中,并在之后将它们读回到相同或不同的 Lua 宇宙中。"