多线程中的Lua并发

时间:2017-09-27 04:05:15

标签: multithreading concurrency lua server

如果我想实现一个只有两个登录和注册功能的服务器,我怎样才能实现最佳的并发性能?

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

第1,如果只有一个帖子,答案很清楚。只有Lua的coroutine可以用于此目的。

第二,如果我有一个多核cpu,并且我想利用这个,那么将考虑多线程。在这种情况下,如果我只使用一个lua_state并实现lua_lock ,并在线程安全模式下使用Lua,但我认为这会导致严重的锁定开销问题。因为,我发现Lua在任何地方都称之为lua_lock。我能想到的一个最佳方法是我为每个线程使用多个lua_states(由lua_new线程创建,共享全局表)并且不实现lua_lock ,但我认为这仅适用于只读操作(登录)。注册怎么样,我只需在注册时锁定全局表吗?

我认为最终的答案是多线程+ lua.coroutine(每个核心创建1个线程,并在每个线程中使用协程)。但我不是没有。

1 个答案:

答案 0 :(得分:0)

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