協(xié)同程序是協(xié)同的性質(zhì),可以把兩個或更多的方法以可控制的方式執(zhí)行。隨著協(xié)同程序,在任何給定的時間,只有其協(xié)同程序運行之一,這在運行協(xié)同程序只能暫停其執(zhí)行時,明確要求暫停。
上述定義可能看起來模糊。來告訴它更清楚,假設(shè)我們有兩個方法,一個主程序方法和協(xié)同程序。當我們使用恢復功能調(diào)用協(xié)程,其開始執(zhí)行,當我們調(diào)用yield功能,暫停執(zhí)行。再次同協(xié)程可以繼續(xù)從它被暫停的另一個恢復功能調(diào)用執(zhí)行。這個過程可以繼續(xù),直到執(zhí)行了協(xié)程的結(jié)束。
協(xié)同程序可用的功能
下表列出了在Lua協(xié)同程序及其相應的使用所有的可用功能。
例子
讓我們看一個例子就明白了協(xié)程的概念。
print("main", coroutine.resume(co, 3, 2))
print("main", coroutine.resume(co, 12,14))
print("main", coroutine.resume(co, 5, 6))
print("main", coroutine.resume(co, 10, 20))
當我們運行上面的程序,會得到下面的輸出。
上面的例子是做什么?
如之前所提到的,我們使用恢復功能的動作開始,并產(chǎn)生函數(shù)來停止操作。此外,可以看到有由協(xié)程恢復功能接收多個返回值。這里將解釋上面的程序每一個步驟,使之清楚。
另一個協(xié)程的例子
讓我們來看一個簡單的協(xié)同程序返回一個數(shù)字,從1到5 yield函數(shù)恢復功能。它創(chuàng)建協(xié)同程序,如果沒有則恢復現(xiàn)有的協(xié)程。
當我們運行上面的程序,會得到下面的輸出。
往往有協(xié)同程序與多道程序語言的線程的比較,但要明白,協(xié)同程序線程有類似的功能,但只有一次執(zhí)行,并不會執(zhí)行兼任。
我們控制程序的執(zhí)行順序,以滿足與提供暫時保留某些信息的需求。使用全局變量與協(xié)程,提供了協(xié)同程序更加靈活。
新聞熱點
疑難解答
圖片精選