Lua - 如何模拟“多线程”?

我有两个函数:

function func1()
   while true do
       -- 监听连接
   end
end

function func2()
   while true do
       -- 执行其他代码
   end
end

我想同时运行这两个函数,同时在它们之间共享变量。我尝试创建一个调度程序,使用两个函数创建一个协程,但我想不出一种快速交替执行它们的方法。(func1运行1秒,func2运行1秒,func1运行1秒,依此类推)

点赞
用户734069
用户734069

Lua 不支持异步多线程。它只支持 协作式 线程。这意味着这两个“线程”必须被_设计_为给其他线程执行的时间。这种设计通常高度依赖于您要完成的任务。

您的示例谈到一个线程监听连接,另一个线程执行某些操作(使用连接的数据或不使用;这并不十分清楚)。在这样的系统中,当连接没有提供新数据时,有一个好主意可以让 func1调用 func2的线程。只有在完成处理某些东西时, func2才会将控制权返回给 func1

但协作多线程没有一种大小适合所有的解决方案。

2017-07-05 15:48:05
用户1944004
用户1944004

存在为 Lua 设计的 C 库,以公开实现多线程或多进程方法。以下是一些例子:

这些都是第三方解决方案,正如其他答案所解释的,Lua 中没有内置的异步多线程能力。

我认为lua-llthread最接近您所描述的。它支持通过 ZeroMQ 进行线程间通信。

2017-07-06 03:32:24