Lua 多线程并发

如果我想要实现一个只有登录和注册两个函数的服务器,我该如何实现最佳并发性能?

以下是我能想到的一些方法。

首先,如果只有一个线程,则答案很清楚。只有Lua的coroutine可以用于此目的。

其次,如果我有一个多核CPU,并且我想利用它,那么考虑多线程。在这种情况下,如果我使用只有一个 lua_state并实现 lua_lock,并在线程安全模式下使用Lua,但我认为这将导致严重的锁定开销问题。因为我发现Lua在几乎所有地方都调用了lua_lock。我能想到的一种最优方法是:为每个线程使用多个lua_states(由 lua_new thread 创建,共享全局表),而不实现 lua_lock,但我认为这仅适用于只读操作(登录)。那么在注册时,我应该只锁定全局表吗?

我认为最终答案将是多线程 + lua.coroutine(每个核心创建1个线程,并在每个线程中使用协程)。但我不知道怎么做。

点赞
用户8758562
用户8758562

你是对的。在 Lua 中使用操作系统线程的唯一有效方法是为每个线程创建单独的 Lua 状态。你可以自己实现或采用一些已经存在的解决方案,例如 https://github.com/effil/effil

2017-10-11 14:07:46