gpt4 book ai didi

c++ - 是否需要使用共享库的不同 lua_State?

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:24 24 4
gpt4 key购买 nike

我的服务器应用程序同时使用 LuaJit 运行 Lua 脚本。每个内部 C++ 脚本类存储自己的 lua_State 表示。

我想要实现的是实现某种共享线程池,以避免从每个正在运行的脚本中产生大量线程(我知道 Lua 正在运行协程,它们不是真正的线程,但一些库确实产生实际线程,就像 cqueue 做 C fork )

我知道有很多库,如 luv(来自 luvit 项目的 libuv 绑定(bind))、turbo、cqueue,此时我只是想知道我是否会使用,例如,脚本 A 中的 libuv 提供的 EventLoop 是吗将与需要相同库的脚本 B 中使用的循环相同吗?

问题在于,Lua 脚本可能有一个长时间运行的任务,而 C++ 代码需要调用事件回调。考虑到 lua_State 不是线程安全的,它将阻塞整个服务器线程。

最佳答案

这完全取决于被调用的库。

您(或多或少)不能多次加载相同的 SO,因为根据定义这是相同的代码。因此,如果被调用的库本身不是线程安全的(它有一些库全局状态或其他),那么如果没有某种形式的显式同步,任何依赖它的代码都不是线程安全的。

您必须调查此代码使用的库,以查看它们是否依赖于全局状态。

关于c++ - 是否需要使用共享库的不同 lua_State?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51943629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com