我应该使用什么LuaJit线程架构?

我正在devise自己的游戏引擎,用于实时CRPG–想想Baulder's Gate。 我现在知道我的大部分规范,目前我正处于规划阶段。

我selectLua有很多原因。

  • 快速和实时的迭代。
  • 轻松布置数据和序列化表。
  • 易于为其他程序员学习。
  • 可以devise工具来为某些实体自动编写脚本

出于第一个原因,我决定尽可能在Lua中处理我的游戏代码。 除了在C ++中处理的低级系统外:audio,物理,animation,渲染,资源管理器(?)。

但是当涉及到线程时,我遇到了一个问题。 我决定使用工作系统。 但我不知道如何着重强调Lua。

我的更新外观看起来像…

Local dt {} While Game.isRunning() { dt = timer.delta(); PreUpdate(dt); //Delayed Raycasts for AI, Physics Triggers UpdateLogic(dt); //AI, UI, Event Handling, etc. UpdateAnimations(dt); //State Machines, Blending, framed scripts UpdatePhysics(dt); Render(dt); } 

我应该如何处理这个线程?

我的第一个想法是,我只有一个虚拟机的Lua,并将其设置在主线程上; 那么工作线程只能在C ++中工作。 Lua将有C ++ APIcallback。 当Lua调用这个callback时,它返回到C ++。 C ++将创建一个工作分派。 这个工作被放置在一个qeue中,并在本地代码的其他线程上处理。 我正在考虑遵循这个想法。 大多数游戏似乎都是以串行方式处理游戏逻辑–UpdateLogic(dt) – ,然后asynchronous更新底层系统,multithreading渲染或处理立即触发所需的事件。

我的第二个想法是使用一个使用Lua实例的所有线程的作业系统。 我想用这个系统我可以以线程方式更新实体。 但我可以很快看到问题。 由于实体的数据是可变的,这可能会很快导致逻辑错误。 即使我决定推迟更新数据,我仍然可以看到这成为一个math错误的问题。

任何指导将在这里有所帮助。