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

时间:2017-07-05 15:22:28

标签: multithreading function lua

我有两个功能:

function func1()
   while true do
       -- listen on connection
   end
end

function func2()
   while true do
       -- execute other code
   end
end

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

2 个答案:

答案 0 :(得分:3)

Lua不支持异步多线程。它仅支持协作线程。这意味着两个"线程"必须设计才能让其他线程有时间执行。这样的设计通常高度依赖于你想要完成的事情。

您的示例讨论了一个线程正在侦听连接而另一个线程正在执行某些操作(使用该连接的数据与否;它并不完全清楚)。在这样的系统中,当连接没有提供新数据时,让func1调用func2的线程是个好主意。 func2仅在处理完成后才会将控制权返还给func1

但合作多线程没有一刀切的解决方案。

答案 1 :(得分:0)

Lua存在C库,它们公开了多线程或多处理的方法。一些例子是

所有这些都是第三方解决方案,正如另一个答案所解释的那样,Lua中没有内置的异步多线程功能。

我认为lua-llthread最接近你描述的内容。它支持通过ZeroMQ在线程之间进行通信。