欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn)

 更新時(shí)間:2018年10月25日 15:41:53   作者:Czhenya  
今天小編就為大家分享一篇關(guān)于Lua協(xié)同程序coroutine的簡(jiǎn)介及優(yōu)缺點(diǎn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

什么是協(xié)同(coroutine)?

Lua 協(xié)同程序(coroutine)與線程比較類似:擁有獨(dú)立的堆棧,獨(dú)立的局部變量,獨(dú)立的指令指針,同時(shí)又與其它協(xié)同程序共享全局變量和其它大部分東西。

協(xié)同是非常強(qiáng)大的功能,但是用起來(lái)也很復(fù)雜。

線程和協(xié)同程序區(qū)別

協(xié)程是編譯器級(jí)別的,線程是操作系統(tǒng)級(jí)別的,在多處理器情況下,多線程程序同時(shí)運(yùn)行多個(gè)線程;而協(xié)同程序是通過(guò)協(xié)作來(lái)完成,在任一指定時(shí)刻只有一個(gè)協(xié)同程序在運(yùn)行,并且這個(gè)正在運(yùn)行的協(xié)同程序只在必要時(shí)才會(huì)被掛起。這樣Lua的協(xié)程就不能利用現(xiàn)在多核技術(shù)了。

coroutine優(yōu)缺點(diǎn)分析

上面對(duì)coroutine有個(gè)基本的了解,因此大家都會(huì)象我一樣去想,為什么要用coroutine?先研究下優(yōu)點(diǎn)

  • 每個(gè)coroutine有自己私有的stack及局部變量。
  • 同一時(shí)間只有一個(gè)coroutine在執(zhí)行,無(wú)需對(duì)全局變量加鎖。
  • 順序可控,完全由程序控制執(zhí)行的順序。而通常的多線程一旦啟動(dòng),它的運(yùn)行時(shí)序是沒(méi)法預(yù)測(cè)的,因此通常會(huì)給測(cè)試所有的情況帶來(lái)困難。所以能用coroutine解決的場(chǎng)合應(yīng)當(dāng)優(yōu)先使用coroutine。

再看缺點(diǎn),研究coroutine缺點(diǎn)之前,我尋找了一下Lua中為什么實(shí)現(xiàn)coroutine的一些說(shuō)明。在巴西人寫的paper Coroutines in Lua(pdf)中解釋了幾個(gè)原因:

  • Lua是ANSI C實(shí)現(xiàn)的,ANSI C并不包含thread的實(shí)現(xiàn),因此如果要在Lua增加thread的支持就要使用操作系統(tǒng)本地的實(shí)現(xiàn),這樣會(huì)造成通用的問(wèn)題。同時(shí)也會(huì)使Lua變得臃腫。因此Lua選擇了在ANSI C上實(shí)現(xiàn)的coroutine。
  • Lua主要設(shè)計(jì)目的之一是給C調(diào)用,如果Lua內(nèi)部又有多線程實(shí)現(xiàn)的話會(huì)造成C調(diào)用狀態(tài)的混亂,而只提供coroutine層面的掛起則可以保持狀態(tài)的一致性。

以上這些理由都是基于Lua特殊的原因而使用的,并不是很通用的原因。我們也了解到,coroutine實(shí)際上是一種古老的設(shè)計(jì)模式,它在60年代就已經(jīng)定型,但是現(xiàn)代語(yǔ)言很少有重視這個(gè)特性,目前可以舉例的有Windows的fibers, Python的generators

基本語(yǔ)法:

簡(jiǎn)例:

--定義協(xié)同函數(shù) (匿名函數(shù))
cor = coroutine.create(
  function(a,b)
    print(a+b)
    coroutine.yield()  --掛起 
    print(a-b)
  end
)
--調(diào)用協(xié)同函數(shù),,(暫停、繼續(xù))
res=coroutine.resume(cor,10,20)
--接收的參數(shù)第一個(gè)是是否成功執(zhí)行,后面的才是協(xié)程運(yùn)行的返回值
print(res)
print("Czhenya的協(xié)程")
--繼續(xù)運(yùn)行協(xié)程,不需要傳遞參數(shù),即使傳遞也只使用第一次傳的參數(shù)
coroutine.resume(cor)
--協(xié)程的狀態(tài) suspended(掛起,暫停) running(運(yùn)行) date(死亡,結(jié)束)
print(coroutine.status(cor)) 
--協(xié)程運(yùn)行完成后不能再次啟動(dòng)
coroutine.resume(cor) 
--[[ 輸出是 :
30
true
Czhenya的協(xié)程
-10
dead
--]]

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • Lua中的源代碼預(yù)編譯淺析

    Lua中的源代碼預(yù)編譯淺析

    這篇文章主要介紹了Lua中的源代碼預(yù)編譯淺析,Lua確實(shí)允許在運(yùn)行源代碼之前,將源代碼預(yù)編譯成一種中間形式(類比Python的.pyc),需要的朋友可以參考下
    2014-09-09
  • Lua教程(一):在C++中嵌入Lua腳本

    Lua教程(一):在C++中嵌入Lua腳本

    這篇文章主要介紹了Lua教程(一):在C++中嵌入Lua腳本,本文在MAC環(huán)境中開(kāi)發(fā),同時(shí)探討了IOS項(xiàng)目集成Lua、Android項(xiàng)目集成Lua等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • lua操作excel方法分享

    lua操作excel方法分享

    這篇文章主要介紹了lua操作excel方法分享,在網(wǎng)上幾乎沒(méi)有找到像樣的示例資料,所以自己寫了份,推薦給大家。
    2015-03-03
  • Lua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監(jiān)控賦值、通過(guò)table給另一個(gè)table賦值等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua教程(十九):C調(diào)用Lua

    Lua教程(十九):C調(diào)用Lua

    這篇文章主要介紹了Lua教程(十九):C調(diào)用Lua,本文講解了C調(diào)用Lua基礎(chǔ)知識(shí)、table操作、調(diào)用Lua函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua讀取和寫入文件處理例子

    Lua讀取和寫入文件處理例子

    這篇文章主要介紹了Lua讀取和寫入文件處理,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2014-11-11
  • Lua判斷Table是否為空的方法(空的table即{})

    Lua判斷Table是否為空的方法(空的table即{})

    這篇文章主要介紹了Lua判斷Table是否為空的方法(空的table即{}),如何判斷l(xiāng)ua中的table是否是空的table呢,本文就試驗(yàn)了多個(gè)方法,最后得出比較好的判斷方法,需要的朋友可以參考下
    2015-04-04
  • 使用lua實(shí)現(xiàn)php的print_r()函數(shù)功能

    使用lua實(shí)現(xiàn)php的print_r()函數(shù)功能

    筆者比較熟悉php,所以一直在做一些使用lua來(lái)實(shí)現(xiàn)php中函數(shù)的功能,算是自己對(duì)lua理解的一個(gè)小測(cè)試吧
    2014-11-11
  • Lua的內(nèi)存管理淺析

    Lua的內(nèi)存管理淺析

    這篇文章主要介紹了Lua的內(nèi)存管理淺析,本文講解了內(nèi)存管理的相關(guān)知識(shí),同時(shí)講解了垃圾收集器的機(jī)制,需要的朋友可以參考下
    2014-09-09
  • Lua中的repeat...until循環(huán)語(yǔ)句使用教程

    Lua中的repeat...until循環(huán)語(yǔ)句使用教程

    這篇文章主要介紹了Lua中的repeat...until循環(huán)語(yǔ)句使用教程,是Lua入門學(xué)習(xí)中的基礎(chǔ)教程,需要的朋友可以參考下
    2015-05-05

最新評(píng)論