最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

coroutine優(yōu)缺點分析

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

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

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

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

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

基本語法:

簡例:

--定義協(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ù)第一個是是否成功執(zhí)行,后面的才是協(xié)程運行的返回值
print(res)
print("Czhenya的協(xié)程")
--繼續(xù)運行協(xié)程,不需要傳遞參數(shù),即使傳遞也只使用第一次傳的參數(shù)
coroutine.resume(cor)
--協(xié)程的狀態(tài) suspended(掛起,暫停) running(運行) date(死亡,結(jié)束)
print(coroutine.status(cor)) 
--協(xié)程運行完成后不能再次啟動
coroutine.resume(cor) 
--[[ 輸出是 :
30
true
Czhenya的協(xié)程
-10
dead
--]]

總結(jié)

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

相關(guān)文章

  • Lua教程(五):C/C++操作Lua數(shù)組和字符串示例

    Lua教程(五):C/C++操作Lua數(shù)組和字符串示例

    這篇文章主要介紹了Lua教程(五):C/C++操作Lua數(shù)組和字符串示例,本文同時還講解了如何在C/C++函數(shù)里面存儲Lua狀態(tài),需要的朋友可以參考下
    2014-09-09
  • Lua中計算、執(zhí)行字符串中Lua代碼的方法

    Lua中計算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實現(xiàn),需要的朋友可以參考下
    2015-05-05
  • ubuntu 14.04下熟悉lua的語法

    ubuntu 14.04下熟悉lua的語法

    擺在本人目前來說最大的困難就是迅速熟悉Lua語言,后續(xù)的一切工作才有可能,所以必須現(xiàn)在電腦上安裝好Lua開發(fā)環(huán)境,之后program with Lua,我們先來熟悉下lua的語法吧。
    2015-04-04
  • Lua判斷數(shù)據(jù)類型的方法

    Lua判斷數(shù)據(jù)類型的方法

    這篇文章主要介紹了Lua判斷數(shù)據(jù)類型的方法,本文講解了判斷數(shù)據(jù)類型的方法和Lua腳本語言的8種基本數(shù)據(jù)類型,需要的朋友可以參考下
    2015-04-04
  • Lua中執(zhí)行系統(tǒng)命令方法介紹

    Lua中執(zhí)行系統(tǒng)命令方法介紹

    這篇文章主要介紹了Lua中執(zhí)行系統(tǒng)命令方法介紹,Lua中有兩種方法可以執(zhí)行操作系統(tǒng)內(nèi)置命令,需要的朋友可以參考下
    2015-04-04
  • 利用Lua定制Redis命令的方法詳解

    利用Lua定制Redis命令的方法詳解

    這篇文章主要給大家介紹了關(guān)于利用Lua定制Redis命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Lua教程(十一):模塊與包詳解

    Lua教程(十一):模塊與包詳解

    這篇文章主要介紹了Lua教程(十一):模塊與包詳解,本文講解了require函數(shù)、 編寫模塊的基本方法、使用環(huán)境、module函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Ruby元編程技術(shù)詳解(Ruby Metaprogramming techniques)

    Ruby元編程技術(shù)詳解(Ruby Metaprogramming techniques)

    這篇文章主要介紹了Ruby元編程技術(shù)詳解(Ruby Metaprogramming techniques),本文講解了11個關(guān)于元編程的技術(shù)和技巧,需要的朋友可以參考下
    2015-04-04
  • Lua獲取網(wǎng)絡(luò)時間(獲取時間同步服務(wù)器的時間)

    Lua獲取網(wǎng)絡(luò)時間(獲取時間同步服務(wù)器的時間)

    這篇文章主要介紹了Lua獲取網(wǎng)絡(luò)時間(獲取時間同步服務(wù)器的時間),本文使用Lua作為客戶端獲取網(wǎng)絡(luò)上的一些授時服務(wù)提供商的時間,需要的朋友可以參考下
    2015-04-04
  • Lua極簡入門指南(六):模塊

    Lua極簡入門指南(六):模塊

    這篇文章主要介紹了Lua極簡入門指南(六):模塊,本文講解了require函數(shù)、編寫模塊、查找模塊等內(nèi)容,需要的朋友可以參考下
    2014-10-10

最新評論

任丘市| 共和县| 永春县| 苗栗市| 阳西县| 乌拉特前旗| 泸西县| 南丹县| 门头沟区| 法库县| 东莞市| 奎屯市| 福贡县| 望江县| 乐至县| 讷河市| 安乡县| 石渠县| 汉沽区| 舟山市| 宁乡县| 忻城县| 九寨沟县| 永丰县| 华安县| 紫金县| 丰都县| 永平县| 天等县| 德保县| 宁德市| 舟山市| 乾安县| 西盟| 潞西市| 德令哈市| 临潭县| 博湖县| 乐昌市| 满城县| 沅陵县|