在 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编程:
协程类似于线程(在多线程的意义上): 执行行,有自己的堆栈、自己的局部变量,以及 它自己的指令指针;但共享全局变量并且大部分 与其他协程的任何其他内容。之间的主要区别 线程和协程是,从概念上(或字面上,在 多处理器机器),具有线程的程序运行多个线程 同时。另一方面,协程是协作的:A 带有协程的程序在任何给定时间只运行其其中一个 协程,并且这个正在运行的协程仅在以下情况下暂停其执行: 它明确要求暂停。
因此没有同时运行多个协程的功能。
Lua 在单线程中运行,因此没有并行执行任何内容。您只能隔离任务并安排它们。例如,如果一个协程此时无事可做,您可以将控制权交给另一个协程。
你会发现一些库可以解决这个问题。