在多线程程序中嵌入多个Lua实例

我有一个有4个线程的程序。

在每个线程中,我都有一个luaL_newstate();

每个线程只能访问自己的lua实例。

我需要担心什么吗?[即:是否有一些隐藏的状态在背后共享所有lua实例?]

谢谢!

原文链接 https://stackoverflow.com/questions/3018434

点赞
stackoverflow用户1491
stackoverflow用户1491

不,那应该没问题。每个 Lua 实例中都包含了独立的解释器状态,我甚至可以说这是使用多个线程和/或进程时使用 Lua 的首选方式。

如果您最终发现确实需要在 Lua 状态之间进行通信,那么最好将数据序列化并使用 C API 进行传递。我建议阅读“探索用于并发编程的 Lua”白皮书。它介绍了一种使用多个 Lua 进程及其之间进行消息传递的方法,用于进程间通信。

2010-06-10 21:35:25
stackoverflow用户68204
stackoverflow用户68204

在每个线程中创建一个单一的lua_State是解决多个Lua执行线程的好方法。然而,这些状态是非常分离的。特别是,由于Lua API只有在每个lua_State一次只从一个线程访问时才是线程安全的,因此在它们之间进行安全通信是困难的(除非lua_locklua_unlock被实现为合适的互斥锁,这在Lua核心的默认构建中并没有进行)。

如果这种程度的隔离是不可接受的,那么你需要研究一些允许Lua实例在线程化过程中与其他实例协作的机制之一。

我最喜欢的选择是Lua Lanes,它提供了多线程及其之间以线程安全的方式传递消息和共享值的机制。大多数Lua类型的值(包括userdata,在使用它的库提供一些C侧支持的情况下)可以安全和有效地从一个车道传递到另一个车道。

还有其他机制存在,对于大多数机制,一个很好的起点是Lua用户的多任务维基页面

2010-06-10 23:10:48
stackoverflow用户41661
stackoverflow用户41661

只要你不尝试在 Lua 实例之间传递值而没有先将它们转换为 C,那么你就没问题了。例如,很难在实例之间共享可变表。

你所要求的听起来很容易实现,但不一定比仅仅有多个进程运行更有用。

2010-06-11 01:16:41