好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Lua協同程序coroutine的簡介及優缺點

Lua協同程序coroutine的簡介及優缺點

熱門標簽:海口智能語音電銷機器人好用嗎 陜西便宜電銷機器人軟件 杞縣地圖標注app 外呼系統一天耗費多少流量 昆明電話外呼系統好么 電話機器人每天搜索多少次 免費門店地圖標注注冊入駐 艾比利外呼系統 衡水外呼線路解決

什么是協同(coroutine)?

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

協同是非常強大的功能,但是用起來也很復雜。

線程和協同程序區別

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

coroutine優缺點分析

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

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

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

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

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

基本語法:

簡例:

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

總結

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

您可能感興趣的文章:
  • Lua游戲開發教程之時區問題詳解
  • Lua在各個操作系統中的開發環境配置教程
  • lua開發中實現MVC框架的簡單應用
  • 安裝Nginx+Lua開發環境
  • Centos7 安裝Nginx整合Lua的示例代碼
  • Nginx安裝lua-nginx-module模塊的方法步驟
  • cocos2dx+lua實現橡皮擦功能
  • Lua中三種循環語句的使用講解
  • Lua中的變量與賦值方法
  • Luvit像Node.js一樣寫Lua應用

標簽:臨滄 昌都 西寧 南京 海口 營口 宿遷 泰安

巨人網絡通訊聲明:本文標題《Lua協同程序coroutine的簡介及優缺點》,本文關鍵詞  Lua,協同,程序,coroutine,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua協同程序coroutine的簡介及優缺點》相關的同類信息!
  • 本頁收集關于Lua協同程序coroutine的簡介及優缺點的相關信息資訊供網民參考!
  • 推薦文章