我猜不会(或者,如果可能的话,几乎肯定不值得我花时间)。
我的想法是构造一个包含
offset_ptr
的镜像对象,该对象也位于拥有 lua_State
的类中,子进程可以使用它来获取指向状态的相关指针的位置,无论是或不可行...还有其他对象, lua_
方法可能会访问这些对象,我不确定如何向它们传递正确的地址...
我猜我也需要一个特殊的分配器,不确定是否支持?
由于 Lua 纯粹是用标准 C 实现的,因此显然不支持开箱即用地在共享内存中分配
lua_State
。您可以考虑修改源代码以手动实现该功能,但这可能不值得这么麻烦。相反,您应该将 lua_State
保留在共享内存之外,并在必要时将任何重要数据复制到共享内存中。
我想了很多,得出的结论是不值得。
如果你想在同一个进程中共享Lua内存,只需使用Lua协程并使所有IO非阻塞(即使用C库将其移动到线程或在实际支持它的fd上处理NONBLOCKING)。然后正确地让出并拥有一个正确使用民意调查和朋友的“执行者”。
如果你想在分叉的 Lua 进程之间“共享”值:不要这样做。只需序列化数据并通过套接字或管道发送即可。我将(最终)编写一个低级序列化库,该库在底层使用 string.pack 和 unpack,在 IMO 中,它的性能与您可以获得的性能一样。
这些只是一些想法。如果有人感兴趣的话,我对所有这些的实现都在 civboot 的 civlua 库下。