协同程序线程类和多线程下似:它有它自己的堆栈。自己的局部变量。它有自己的指令指针,但是,其他协程共享全局变量和其他项目信息。主要不同在于:多处理器的情况下。概念上来说多线程是同一时候执行多个线程,而协程是通过协作来完毕,不论什么时刻仅仅有一个协程程序在执行。而且这个在执行的协程仅仅有明白被要求挂起时才会被挂起
你能够使用coroutine.create来创建协程:
co = coroutine.create(function ()
print("hi")
end)
协程有三种状态:挂起,执行,停止。
创建后是挂起状态。即不自己主动执行。status函数能够查看当前状态。
协程真正强大的地方在于他能够通过yield函数将一段正在执行的代码挂起。
lua的resume-yield能够互相交换数据
假设没有相应的yield,传递给resume的额外參数将作为參数传递给协程主函数:
co = coroutine.create(function (a, b, c)
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)
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))
return 6, 7
end)
print(coroutine.resume(co))
(终点)
版权声明:本文博主原创文章,博客,未经同意不得转载。