lua協同程式理解

2021-10-05 20:42:44 字數 1096 閱讀 9690

參考:

協程和多執行緒下的執行緒類似:有自己的堆疊,自己的區域性變數,有自己的指令指標,但是和其他協程程式共享全域性變數等資訊。執行緒和協程的主要不同在於:多處理器的情況下,概念上來說多執行緒是同時執行多個執行緒,而協程是通過協作來完成,任何時刻只有乙個協程程式在執行。並且這個在執行的協程只有明確被要求掛起時才會被掛起

你可以使用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協同程式

co coroutine.create function a print co a end coroutine.resume co,1,2,3 co 1 co coroutine.create function a,b coroutine.yield a b,a b end 在resume呼叫的返回...

初識lua協同程式

協程類似與執行緒,但與執行緒不同,執行緒可以多個執行緒同時執行,但是協程需要彼此協作的執行,乙個具有多個協程的程式任意時刻只能執行乙個協程,並且在執行協程只會在其顯示地要求掛起時,才會暫停。乙個協程有4種不同的狀態 掛起,執行,死亡和正常。建立乙個協程時,他處於掛起狀態。coroutine.stat...

Lua學習筆記之協同程式

lua學習筆記之協同程式 1 協同程式與多執行緒情況下的執行緒比較類似,有自己的堆疊。自己的區域性變數,有自己的指令指標,但是和其他協同程式共享全域性變數等很多資訊。執行緒和協同程式的主要不同在於 在多核處理器情況下,多執行緒程式同時執行多個執行緒,而協同程式是通過協作來完成,在任意指定時刻只有乙個...