Lua:等待多个协程完成

问题描述 投票:0回答:1

在 JavaScript 中,有

const a, b = await Promise.all([task1(), task2()])

在Python中,有

a, b = await asyncio.gather(task1(), task2())

Lua 有与上面类似的东西吗?

local task1 = coroutine.create(...)
local task2 = coroutine.create(...)
local a, b = coroutine.resume_all(task1, task2) -- No such method

-- All the coroutines have run to completion or errored.
assert(coroutine.status(task1) == 'dead')
assert(coroutine.status(task2) == 'dead')
lua coroutine
1个回答
0
投票

我就引用Lua编程

协程类似于线程(在多线程的意义上): 执行行,有自己的堆栈、自己的局部变量,以及 它自己的指令指针;但共享全局变量并且大部分 与其他协程的任何其他内容。之间的主要区别 线程和协程是,从概念上(或字面上,在 多处理器机器),具有线程的程序运行多个线程 同时。另一方面,协程是协作的:A 带有协程的程序在任何给定时间只运行其其中一个 协程,并且这个正在运行的协程仅在以下情况下暂停其执行: 它明确要求暂停。

因此没有同时运行多个协程的功能。

Lua 在单线程中运行,因此没有并行执行任何内容。您只能隔离任务并安排它们。例如,如果一个协程此时无事可做,您可以将控制权交给另一个协程。

你会发现一些库可以解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.