【问题标题】:Lua - how to simulate "multithreading"?Lua - 如何模拟“多线程”?
【发布时间】:2017-12-09 08:39:35
【问题描述】:

我有两个功能:

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

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

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

【问题讨论】:

    标签: multithreading function lua


    【解决方案1】:

    Lua 不支持异步多线程。它只支持合作线程。这意味着必须设计两个“线程”以给另一个线程时间来执行。此类设计通常高度依赖于您要完成的工作。

    您的示例谈到一个线程正在侦听连接,而另一个线程正在做某事(无论是否使用来自该连接的数据;这并不完全清楚)。在这样的系统中,当连接没有提供新数据时,让func1func2 调用线程是个好主意。而func2 只会在处理完某些内容后将控制权返回给func1

    但是对于协作多线程,没有万能的解决方案。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-16
        • 2017-07-08
        • 2020-01-12
        • 1970-01-01
        相关资源
        最近更新 更多