在多线程程序中嵌入多个Lua实例
2010-6-10 20:54:2
收藏:0
阅读:177
评论:3
我有一个有4个线程的程序。
在每个线程中,我都有一个luaL_newstate();
每个线程只能访问自己的lua实例。
我需要担心什么吗?[即:是否有一些隐藏的状态在背后共享所有lua实例?]
谢谢!
原文链接 https://stackoverflow.com/questions/3018434
点赞
stackoverflow用户68204
在每个线程中创建一个单一的lua_State
是解决多个Lua执行线程的好方法。然而,这些状态是非常分离的。特别是,由于Lua API只有在每个lua_State
一次只从一个线程访问时才是线程安全的,因此在它们之间进行安全通信是困难的(除非lua_lock
和lua_unlock
被实现为合适的互斥锁,这在Lua核心的默认构建中并没有进行)。
如果这种程度的隔离是不可接受的,那么你需要研究一些允许Lua实例在线程化过程中与其他实例协作的机制之一。
我最喜欢的选择是Lua Lanes,它提供了多线程及其之间以线程安全的方式传递消息和共享值的机制。大多数Lua类型的值(包括userdata
,在使用它的库提供一些C侧支持的情况下)可以安全和有效地从一个车道传递到另一个车道。
还有其他机制存在,对于大多数机制,一个很好的起点是Lua用户的多任务维基页面。
2010-06-10 23:10:48
stackoverflow用户41661
只要你不尝试在 Lua 实例之间传递值而没有先将它们转换为 C,那么你就没问题了。例如,很难在实例之间共享可变表。
你所要求的听起来很容易实现,但不一定比仅仅有多个进程运行更有用。
2010-06-11 01:16:41
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 实例中都包含了独立的解释器状态,我甚至可以说这是使用多个线程和/或进程时使用 Lua 的首选方式。
如果您最终发现确实需要在 Lua 状态之间进行通信,那么最好将数据序列化并使用 C API 进行传递。我建议阅读“探索用于并发编程的 Lua”白皮书。它介绍了一种使用多个 Lua 进程及其之间进行消息传递的方法,用于进程间通信。