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

ano*_*non 15 lua multithreading

我有一个包含4个线程的程序.

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

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

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

谢谢!

Jud*_*den 20

不,那应该工作得很好.所有解释器状态都是自包含在每个Lua实例中.我甚至会说这是使用Lua和多个线程和/或进程的首选方法.

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


RBe*_*eig 6

创建单个lua_State每个线程是一个很好的解决方案,拥有多个Lua执行线程.但是,这些州非常分散.特别是,很难在它们之间安全地进行通信,因为Lua API只是线程安全的,只要每次lua_State从一个线程访问它们.(好吧,除非lua_lock并且lua_unlock实现为合适的互斥锁,它们不在lua核心的默认构建中.)

如果这种隔离级别是不可接受的,那么您需要调查几种机制之一,以允许Lua实例在线程进程中与其他实例很好地协作.

我最喜欢的选择是Lua Lanes,它提供了多个线程以及一种机制,用于以线程安全的方式传递消息并在它们之间共享值.大多数Lua类型的值(包括userdata来自使用它的库的一点C侧支持)可以安全有效地从一个通道传递到另一个通道.

存在其他机制,其中大多数机制的一个很好的起点是在MultiTaksing的Lua用户的wiki页面上.