lua協同程式

2021-07-17 02:23:39 字數 1119 閱讀 3749

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呼叫的返回函式中,第乙個為true則表示沒有錯誤,

--而後面所有的值都是yield傳入的引數

print(coroutine.resume(co,20,10)) —>true 30 10

yield返回的額外值就是對應resume傳入的引數

print(coroutine.resume(co,20,10,40)) —>true 30 10 40

--協同程式結束時,它的主函式所返回的值都將作為對應resume的返回值

co = coroutine.create(

function()

return 6,7

end)

print(coroutine.resume(co)) —>true 6 7

協同程式只有在它沒有呼叫其他函式時才可以掛起執行。

只有協同程式的主函式才能呼叫類似於yield這樣的函式。

coroutine.status(co)
協同程式在建立後狀態為suspended(掛起)

呼叫coroutine.resume(co)其狀態改為執行(running)

執行完成後變為死亡狀態(dead)

resume是在保護模式中執行的,如果乙個協同程式的執行中發生任何錯誤,lua是不會顯示錯誤訊息的,而是將執行權返回給resume呼叫。

print(coroutine.resume(co))  -> false cannot resume dead coroutine
第乙個協同程式a喚醒另乙個協同程式b時,協同程式a就處於乙個特殊狀態,既不是掛起狀態,也不是執行狀態。稱為正常狀態。

乙個具有多個執行緒的程式可以同時執行幾個執行緒,而同一時刻只有乙個協同程式在執行,

初識lua協同程式

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

lua協同程式理解

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

Lua學習筆記之協同程式

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