協程和多線程下的線程類似:有自己的堆棧,自己的局部變量,有自己的指令指針,但是和其他協程程序共享全局變量等信息。線程和協程的主要不同在于:多處理器的情況下,概念上來說多線程是同時運行多個線程,而協程是通過協作來完成,任何時刻只有一個協程程序在運行。并且這個在運行的協程只有明確被要求掛起時才會被掛起
你可以使用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))
(完)
您可能感興趣的文章:- Lua協程(coroutine)程序運行分析
- Lua之協同程序coroutine代碼實例
- Lua協同程序(COROUTINE)運行步驟分解
- Lua協同程序函數coroutine使用實例
- Lua編程示例(七):協同程序基礎邏輯
- 舉例詳解Lua中的協同程序編程
- Lua中的協同程序詳解
- Lua中的協同程序之resume-yield間的數據返回研究
- Lua中的協同程序探究
- Lua協同程序coroutine的簡介及優缺點