Lua中的协程coroutine
Posted 飞鹰技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua中的协程coroutine相关的知识,希望对你有一定的参考价值。
Lua语言实现的协程是一种非对称式(asymmetric)协程,或称半对称式(semi-symmetric)协程。它提供了两种传递程序控制权的操作:一种是通过coroutine.resume重调用协程();另一种是通过coroutine.yield挂起协程并将程序控制权返回给协程的调用者。
常用函数说明
方法 | 说明 |
co=coroutine.create(f) |
为函数 f创建一个的新协程。创建后并没有启动,需通过resume启动 |
coroutine.resume(co, [, val1, ...]) | 开始或继续运行协程co,val1,...这些值会以参数形式传入主体函数。返回值为true/false + 函数返回值(yield的所有值)。
|
coroutine.yield(...) | 挂起正在调用的协程的执行。 传递给 yield 的参数都会转为 resume 的额外返回值(true/false之外的)。 |
coroutine.status(co) | 以字符串形式返回协程 co 的状态:
|
trd = coroutine.wrap(f) | 为函数 f创建的新协程。返回一个函数,每次调用该函数都会延续该协程(相当于调用 resume) |
消费者驱动(consumer-driven)
如下通过这种方式实现的生产者与消费者:
function consumer()
while true do
local x=producer() -- 唤醒生产者
if(x == nil) then break end
print("Consum: ", x)
end
end
producer = coroutine.wrap( -- 返回值,类似函数,可调用
function()
for i=2,20 do
print("Produce: ", i)
coroutine.yield(i) -- 产生值,返回
end
end
)
consumer() --开启生产-消费
以上是关于Lua中的协程coroutine的主要内容,如果未能解决你的问题,请参考以下文章