Lua學習筆記之協同程式

2021-06-27 06:12:27 字數 815 閱讀 3012

lua學習筆記之協同程式

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

2、  協同的基礎

lua通過table提供了所有的協同函式,create函式建立乙個新的協同程式,create只有乙個引數,協同程式將要執行的**封裝而成的函式,返回值為thread型別的值表示建立了乙個新的協同程式。

co =coroutine.create(function ()

print(「hi」)

end)

print(co)  -->thread:ox8071d98

協同有三個狀態:掛起態、執行態、停止態。當我們建立乙個協同程式時他開始的狀態為掛起態,也就是說我們建立協同程式的時候不會自動執行,可以使用status函式檢查協同的狀態:

print(coroutine.status(co))   -->suspended

函式coroutine.resume可以使程式由掛起狀態變為執行狀態

coroutine.resume(co)

yield函式可以將正在執行的**掛起:

co =corutine.create(function ()

for i=1,10 do

print(「co」,i)

coroutine.yield()

endend)

3、  非搶占式多執行緒

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學習筆記四 協同程式coroutine

lua中的協同程式類似於多執行緒,但是與多執行緒還是有點區別的,區別在於協同程式必須必須合作,且同一時刻只有執行乙個協同程式。這是乙個簡單的示例函式,下面看看協同程式的呼叫 在上面的呼叫 中,右邊附上了列印輸出,第一行是建立乙個協同程式,第二行檢視協同程式的返回值,第三行檢視此時協同程式的狀態,處於...

初識lua協同程式

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