亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

協程三篇之一(協程初接觸)

系統 2147 0

賴勇浩(http://laiyonghao.com)

協程三篇之一(協程初接觸)

協程,又稱微線程和纖程等,據說源于 Simula 和 Modula-2 語言(我沒有深究,有錯請指正),現代編程語言基本上都有支持,比如 Lua、ruby 和最新的 Google Go,當然也還有最近很讓我驚艷的 falcon。協程是用戶空間線程,操作系統其存在一無所知,所以需要用戶自己去做調度,用來執行協作式多任務非常合適。其實用協程來做的東西,用線程或進程通常也是一樣可以做的,但往往多了許多加鎖和通信的操作。

下面是生產者消費者模型的基于搶占式多線程編程實現(偽代碼):
// 隊列容器
var q := new queue
// 消費者線程
loop
lock(q)
get item from q
unlock(q)
if item
use this item
else
sleep
// 生產者線程
loop
create some new items
lock(q)
add the items to q
unlock(q)

由以上代碼可以看到線程實現至少有兩點硬傷:

1、對隊列的操作需要有顯式/隱式(使用線程安全的隊列)的加鎖操作。

2、消費者線程還要通過 sleep 把 CPU 資源適時地“謙讓”給生產者線程使用,其中的適時是多久,基本上只能靜態地使用經驗值,效果往往不由人意。

而使用協程可以比較好的解決這個問題,下面來看一下基于協程的生產者消費者模型實現(偽代碼):
// 隊列容器
var q := new queue
// 生產者協程
loop
while q is not full
create some new items
add the items to q
yield to consume
// 消費者協程
loop
while q is not empty
remove some items from q
use the items
yield to produce

可以從以上代碼看到之前的加鎖和謙讓 CPU 的硬傷不復存在,但也損失了利用多核 CPU 的能力。所以選擇線程還是協程,就要看應用場合了。下面簡單談一下協程常見的用武之地,其中之一是狀態機,能夠產生更高可讀性的代碼;還有就是并行的角色模型,這在游戲開發中比較常見;以及產生器, 有助于對輸入/輸出和數據結構的通用遍歷。

協程雖然如此之好,看是很長時間以來,因為受到基于堆棧的子例程實現的限制,并沒有多少語言在其實語言或庫中支持協程,所以線程作為一個替代者(當然,線程也有其超越協程之處)被廣泛接受了。但是在今天,很多語言都內建了協程的支持,甚至是 C/C++ 語言。MS Windows 2000 以后的版本,都支持所謂的 Fiber,即纖程,其實就是協程的別稱;在開源平臺,POSIX 標準也定義了協程相關的標準,GNU Portable Threads 實現了跨平臺的用戶空間線程,即協程的另一種別稱。在這百花齊放的時節,正是我們好好學習和利用它的時機。

接下來我將在第二篇中談談游戲中試用協程的三個場合。

協程三篇之一(協程初接觸)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 蜜桃日本一道无卡不码高清 | 久久老色鬼天天综合网观看 | 尹人成人网 | 亚洲码在线| 黄 色 免 费 网站在线观看 | 欧美精品一区二区精品久久 | 欧美日韩乱码毛片免费观看 | 日本久久久久一级毛片 | 日韩精品一区二区三区免费观看 | 成人精品 | 91久久99热青草国产 | 综合欧美视频一区二区三区 | 欧美亚洲第一区 | 亚洲日本中文字幕在线 | 天天操天天插天天干 | 亚洲 欧洲 另类 综合 自拍 | 欧美日韩国产成人综合在线影院 | 一级免费a| 精品一区二区三区中文 | 亚洲精品tv久久久久 | 成人爱爱爱欧美日本视频 | 亚洲免费黄色 | 国产三及 | 好吊妞视频一区二区 | 日韩精品一区二区三区中文 | 思思91精品国产综合在线 | 久久夜色tv网站免费影院 | 综合激情五月婷婷 | 日本中文字幕不卡免费视频 | 国产精品欧美一区二区 | 老司机观看精品一区二区 | 两性色午夜视频免费老司机 | 国产精品久久自在自2021 | 欧美一区永久视频免费观看 | 亚洲精品国产男人的天堂 | 日韩精品视频美在线精品视频 | 久久综合伊人77777 | 国产成人青草视频 | 夜夜天堂 | 免费观看日本污污ww网站精选 | 中文字幕久久久久一区 |