我可以在共享内存中存储 lua_State 吗?

问题描述 投票:0回答:2

我猜不会(或者,如果可能的话,几乎肯定不值得我花时间)。

我的想法是构造一个包含

offset_ptr
的镜像对象,该对象也位于拥有
lua_State
的类中,子进程可以使用它来获取指向状态的相关指针的位置,无论是或不可行...还有其他对象,
lua_
方法可能会访问这些对象,我不确定如何向它们传递正确的地址...

我猜我也需要一个特殊的分配器,不确定是否支持?

c++ lua shared-memory
2个回答
3
投票

由于 Lua 纯粹是用标准 C 实现的,因此显然不支持开箱即用地在共享内存中分配

lua_State
。您可以考虑修改源代码以手动实现该功能,但这可能不值得这么麻烦。相反,您应该将
lua_State
保留在共享内存之外,并在必要时将任何重要数据复制到共享内存中。


0
投票

我想了很多,得出的结论是不值得。

如果你想在同一个进程中共享Lua内存,只需使用Lua协程并使所有IO非阻塞(即使用C库将其移动到线程或在实际支持它的fd上处理NONBLOCKING)。然后正确地让出并拥有一个正确使用民意调查和朋友的“执行者”。

如果你想在分叉的 Lua 进程之间“共享”值:不要这样做。只需序列化数据并通过套接字或管道发送即可。我将(最终)编写一个低级序列化库,该库在底层使用 string.pack 和 unpack,在 IMO 中,它的性能与您可以获得的性能一样。

这些只是一些想法。如果有人感兴趣的话,我对所有这些的实现都在 civboot 的 civlua 库下。

© www.soinside.com 2019 - 2024. All rights reserved.