ano*_*non 15 lua multithreading
我有一个包含4个线程的程序.
在每个线程中,我做一个luaL_newstate();
每个线程只能访问它自己的lua实例.
有什么我需要担心的吗?[即有一些隐藏的状态,所有lua实例在我背后分享?]
谢谢!
Jud*_*den 20
不,那应该工作得很好.所有解释器状态都是自包含在每个Lua实例中.我甚至会说这是使用Lua和多个线程和/或进程的首选方法.
如果您发现最终需要在Lua状态之间进行通信,那么最好将数据序列化并使用C API传递它.我建议阅读" 探索Lua for Concurrent Programming "白皮书.它介绍了一种使用多个Lua 进程和消息传递进行进程间通信的方法.
创建单个lua_State每个线程是一个很好的解决方案,拥有多个Lua执行线程.但是,这些州非常分散.特别是,很难在它们之间安全地进行通信,因为Lua API只是线程安全的,只要每次lua_State从一个线程访问它们.(好吧,除非lua_lock并且lua_unlock实现为合适的互斥锁,它们不在lua核心的默认构建中.)
如果这种隔离级别是不可接受的,那么您需要调查几种机制之一,以允许Lua实例在线程进程中与其他实例很好地协作.
我最喜欢的选择是Lua Lanes,它提供了多个线程以及一种机制,用于以线程安全的方式传递消息并在它们之间共享值.大多数Lua类型的值(包括userdata来自使用它的库的一点C侧支持)可以安全有效地从一个通道传递到另一个通道.
存在其他机制,其中大多数机制的一个很好的起点是在MultiTaksing的Lua用户的wiki页面上.
| 归档时间: |
|
| 查看次数: |
6341 次 |
| 最近记录: |