【问题标题】:How to wait all coroutine finished in lua just like waitgroup in go?如何像 go 中的 waitgroup 一样等待所有协程在 lua 中完成?
【发布时间】:2020-05-13 13:54:23
【问题描述】:

如何在 lua 中等待所有协程完成,就像 go 中的 waitgroup 一样? Go 中的 Waitgroup 是用 Semaphobe 完成的。但是如何在lua中完成呢?还是有更好的方案?

【问题讨论】:

  • to wait 是什么意思?在 Lua 中,协程是协作的(在任何给定时间,只有一个协程运行)。在 golang 中,它们确实是并行和同时的。

标签: lua synchronization coroutine


【解决方案1】:

Lua 不是线程脚本语言。它没有多个事情能够同时发生的概念(您可以在不同的线程上执行多个独立的 Lua 状态,但它们是 不同 Lua 状态。如果您希望它们能够交谈彼此之间,那么您必须提供手动执行此操作的方法)。

因此,Lua 协程只是一个可以选择暂停执行的函数,向调用协程的函数返回一些值。然后用户可以恢复协程,允许它进一步执行一些任务。这是合作多任务;一个任务只有在它选择时才会暂停执行。这与抢先式多任务处理形成对比,其中一个任务可以停止执行或与其他任务并行执行。

鉴于此,“等待”一个协程或一组协程的想法根本没有意义。当您希望协程进一步执行时,您恢复协程;这不是被动行为。

您当然可以创建一个协程列表并依次重复恢复每个协程,直到所有协程都终止。但是没有 Lua 标准库函数可以做到这一点,因为它通常对协程执行的用途没有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-16
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多