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