Multithreading 在多线程程序中嵌入多个lua实例
我有一个有4个线程的程序 在每个线程中,我执行一个luaL_newstate() 每个线程只能访问自己的lua实例 有什么我需要担心的吗?[即,是否存在所有lua实例在我背后共享的隐藏状态?]Multithreading 在多线程程序中嵌入多个lua实例,multithreading,lua,Multithreading,Lua,我有一个有4个线程的程序 在每个线程中,我执行一个luaL_newstate() 每个线程只能访问自己的lua实例 有什么我需要担心的吗?[即,是否存在所有lua实例在我背后共享的隐藏状态?] 谢谢 不,这样就可以了。所有解释器状态都包含在每个Lua实例中。我甚至想说,这是将Lua用于多线程和/或进程的首选方法 如果您最终发现确实需要在Lua状态之间通信,那么最好序列化数据并使用C API传递它。我建议您阅读“”白皮书。它介绍了一种将多个Lua与for一起使用的方法。为每个线程创建一个Lua\u
谢谢 不,这样就可以了。所有解释器状态都包含在每个Lua实例中。我甚至想说,这是将Lua用于多线程和/或进程的首选方法
如果您最终发现确实需要在Lua状态之间通信,那么最好序列化数据并使用C API传递它。我建议您阅读“”白皮书。它介绍了一种将多个Lua与for一起使用的方法。为每个线程创建一个
Lua\u状态
,这是多个Lua线程执行的一个很好的解决方案。然而,这些国家是非常分离的。特别是,它们之间很难安全通信,因为只要每次从单个线程访问每个Lua\u状态
,Lua API就只能是线程安全的。(除非lua_lock
和lua_unlock
被实现为合适的互斥锁,它们不在lua核心的默认版本中。)
如果这种隔离级别是不可接受的,那么您需要研究几种机制中的一种,以允许Lua实例在线程化过程中与其他实例很好地协作
我最喜欢的选择是,它提供了多个线程以及一种机制,用于以线程安全的方式在它们之间传递消息和共享值。大多数Lua类型的值(包括userdata
以及使用它的库的一点C端支持)都可以安全有效地从一个通道传递到另一个通道
存在其他机制,其中大多数机制的一个良好起点是Lua用户。只要不先将Lua实例转换为C,就不要尝试在Lua实例之间传递值,就可以了。例如,在实例之间共享可变表几乎是不可能的 您所要求的听起来很简单,但并不一定比运行多个进程更有用,每个进程都有自己的Lua和地址空间