协同程序线程类和多线程下似:它有它自己的堆栈。自己的局部变量。它有自己的指令指针,但是,其他协程共享全局变量和其他项目信息。主要不同在于:多处理器的情况下。概念上来说多线程是同一时候执行多个线程,而协程是通过协作来完毕,不论什么时刻仅仅有一个协程程序在执行。而且这个在执行的协程仅仅有明白被要求挂起时才会被挂起


你能够使用coroutine.create来创建协程:
co = coroutine.create(function ()
     print("hi")
end)

协程有三种状态:挂起,执行,停止。

创建后是挂起状态。即不自己主动执行。status函数能够查看当前状态。

协程真正强大的地方在于他能够通过yield函数将一段正在执行的代码挂起。


lua的resume-yield能够互相交换数据
假设没有相应的yield,传递给resume的额外參数将作为參数传递给协程主函数:

co = coroutine.create(function (a, b, c)
     print("co", a, b, c)
end)
coroutine.resume(co, 1, 2, 3)

假设没有错误的话,resume将返回true和yield的參数:
co = coroutine.create(function (a, b)
     coroutine.yield(a+b, a-b)
end)
print(coroutine.resume(co, 3, 8))

相同地,yield也将返回由相应的resume传递而来的參数:
co = coroutine.create (function ()

print("co", coroutine.yield())

end)

coroutine.resume(co)

coroutine.resume(co, 4, 5)

最后,协程主函数返回值将作为与之相应的resume的返回值(第一个參数是true)。
co = coroutine.create(function ()

return 6, 7

end)

print(coroutine.resume(co)) 

(终点)

版权声明:本文博主原创文章,博客,未经同意不得转载。

05-12 09:59