Lua學習筆記四——協同程式coroutine

來源:互聯網
上載者:User

lua中的協同程式類似於多線程,但是與多線程還是有點區別的,區別在於協同程式必須必須合作,且同一時刻只有運行一個協同程式。

 

function p()<br />print("Hello World")<br />end

 

這是一個簡單的樣本函數,下面看看協同程式的調用

co = coroutine.create(p)<br />print(co)--> thread: 003FBBF0<br />print(coroutine.status(co))--> suspended<br />coroutine.resume(co)--> Hello World<br />print(coroutine.status(co))--> dead

 

在上面的調用代碼中,右邊附上了列印輸出,第一行是建立一個協同程式,第二行查看協同程式的傳回值,第三行查看此時協同程式的狀態,處於suspended(掛起)狀態,第四行執行協同程式,第五行查看此時協同程式狀態,處於dead(死亡)狀態。

 

協同程式有四種狀態,suspended(掛起)、running(運行)、dead(死亡)、normal(正常),

當調用coroutine.create後,處於掛起狀態

調用coroutine.resume後,處於運行狀態,執行完畢後,處於死亡狀態

當一個協同程式a調用另一個協同程式b後,a就處於正常狀態,b處於運行狀態

 

協同程式傳遞參數:

co2 = coroutine.create(function(a, b)<br /> coroutine.yield(a * b, a + b)<br /> end)<br />print(coroutine.resume(co2, 2, 2009))

 

在resume調用中,除第一個值外,其餘值都將傳給yield,執行後的返回之中,第一個值為Boolean類型,協同程式運行是否正常,其餘的值是對應yield的傳回值。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.