青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Nebula3的多線程架構(gòu)

Posted on 2008-12-14 21:57 Condor 閱讀(659) 評(píng)論(0)  編輯 收藏 引用

Nebula3的代碼運(yùn)行在兩種根本不同的方案中. 第一種方案我稱之為”Fat Thread”. 一個(gè)Fat Thread在一個(gè)線程中運(yùn)行一個(gè)完整的子系統(tǒng)(如渲染, 音頻, AI, 物理, 資源管理), 并且基本上鎖定在一個(gè)特定的核心上.

第二種類型的線程我叫它”Job”. 一個(gè)job是一些數(shù)據(jù)和用于處理這些數(shù)據(jù)的包裝成C++對(duì)象的代碼. 工作調(diào)度程序掌管了Job對(duì)象, 并且把工作分配給低負(fù)載的核心來保持它們一直處于忙碌狀態(tài).

顯然, 挑戰(zhàn)就是設(shè)計(jì)一個(gè)經(jīng)過全面考慮的系統(tǒng), 以保持所有的核心一直均勻地忙碌著. 這不但意味著連續(xù)的活動(dòng)需要在游戲每幀的空閑時(shí)期內(nèi)輪流交替, 而且要求job對(duì)象不得不事先(如每幀前)創(chuàng)建好, 這樣才能在各種Fat Thread空閑時(shí)填充當(dāng)前幀的空白.

這是我希望進(jìn)行更多試驗(yàn)和調(diào)整的地方.

第二個(gè)挑戰(zhàn)就是讓程序員的工作盡量的簡單. 一個(gè)游戲應(yīng)用程序員(邏輯程序員)在任何時(shí)候都不應(yīng)該關(guān)心他運(yùn)行在一個(gè)多線程的環(huán)境中, 不應(yīng)該擔(dān)心會(huì)產(chǎn)生死鎖或改寫了其它線程的數(shù)據(jù), 也不應(yīng)該瞎搞一些臨界區(qū), 事件和信號(hào)量. 同樣, 整個(gè)引擎的架構(gòu)也不應(yīng)該是”脆弱的”. 大部分傳統(tǒng)的多線程代碼在一定程度上都會(huì)發(fā)生紊亂, 或者忘記了臨界區(qū)而打亂數(shù)據(jù).

當(dāng)線程間需要進(jìn)行數(shù)據(jù)共享和通信時(shí), 多線程就變得很棘手. 像兩個(gè)臨界區(qū)這樣的解決方案也會(huì)導(dǎo)致脆弱代碼問題.

從大的角度來說, Nebula3通過一個(gè)”并行Nebula”的概念解決了這個(gè)兩個(gè)問題. 其思想就是運(yùn)行了一個(gè)完整子系統(tǒng)的”Fat Thread”都有自己的最小Nebula運(yùn)行庫, 這個(gè)最小運(yùn)行庫剛好包含了這個(gè)子系統(tǒng)需要的部分. 因此, 如果這個(gè)運(yùn)行在它自己線程中的子系統(tǒng)需要進(jìn)行文件訪問, 它會(huì)有一個(gè)跟其它Fat Thread完全分離的文件服務(wù)器(file server). 這個(gè)解決方案的優(yōu)點(diǎn)是, 大部分Nebula中的代碼都不需要知道它運(yùn)行在一個(gè)多線程的環(huán)境中, 因?yàn)樵趂at thread之間沒有數(shù)據(jù)進(jìn)行共享. 運(yùn)行著的每個(gè)最小Nebula內(nèi)核是跟其它Nebula內(nèi)核完全隔離的. 缺點(diǎn)就是, 重復(fù)的數(shù)據(jù)會(huì)浪費(fèi)一些內(nèi)存, 但是我們只是占用幾KB, 而不是MB.

這些數(shù)據(jù)冗余消除了細(xì)密的鎖定, 并且解決把程序員從思考每一行代碼的多線程安全性中解放了出來.

當(dāng)然, 從某種意義上說Fat Thread間的通信是肯定會(huì)發(fā)生的, 要不然這整個(gè)思想就沒有意義了. 方法就是建立一個(gè)且只有一個(gè)的標(biāo)準(zhǔn)通信系統(tǒng), 并且保證這個(gè)通信系統(tǒng)是可靠而快速的. 這就是消息系統(tǒng)的由來. 要跟一個(gè)Fat Thread通信的話只有發(fā)送一個(gè)消息給它. 消息是一個(gè)簡單的C++對(duì)象, 它包含了一些帶有g(shù)et/set方法的數(shù)據(jù). 通過這個(gè)標(biāo)準(zhǔn)的通信手段, 實(shí)際上只有消息子系統(tǒng)才需要是線程安全的(同樣, 訪問跟消息相關(guān)的資源時(shí), 如內(nèi)存緩沖區(qū), 必須受到約束, 因們它們代表了共享數(shù)據(jù)). (xoyojank: 我說咋那么多Message…)

這樣雖然解決了Fat Thread方案中大多數(shù)的多線程問題, 但沒有解決Job對(duì)象的任何事情. Nebula3很有可能需要約束一個(gè)Job對(duì)象能做什么和不能做什么. 最直接的行為就是限制job做內(nèi)存緩沖區(qū)的計(jì)算. 那樣的話, job中就不能存在復(fù)雜的運(yùn)行庫(不能文件I/O, 不能訪問渲染等等). 如果這樣還不夠的話, 必須定義一個(gè)”job運(yùn)行時(shí)環(huán)境”, 就像Fat Thread中的那樣. 因?yàn)橐粋€(gè)job不會(huì)發(fā)起它自己的線程, 而且還會(huì)被調(diào)度到一個(gè)已經(jīng)存在的線程池中. 就這個(gè)方面來說, 這不存在什么問題.

到現(xiàn)在為止(xoyojank: 2007/01/21, 最新版本已經(jīng)實(shí)現(xiàn)了多數(shù)子系統(tǒng)的多線程化), 只有IO子系統(tǒng)作為概念證明在Fat Thread中得到實(shí)現(xiàn), 并且它運(yùn)行得很今人滿意. 在做傳統(tǒng)的同步IO工作時(shí), 一個(gè)Nebula3程序可以直接調(diào)用本地線程的IO子系統(tǒng). 所以像列出文件夾的內(nèi)容或刪除一個(gè)文件, 只會(huì)調(diào)用一個(gè)簡單的C++方法. 對(duì)于異步IO工作, 定義了一些常見的IO操作消息(如ReadStream, WriteStream, CopyFile, DeleteFile, 等等). 進(jìn)行異步IO只需要幾行代碼: 創(chuàng)建一個(gè)消息對(duì)象, 填充數(shù)據(jù), 并發(fā)送這個(gè)消息到一個(gè)IOInterface單件. 如果必要的話, 這可能會(huì)需要等待和輪詢異步操作.

這樣的好處就是, 整個(gè)IO子系統(tǒng)沒有一行多線程意義上的代碼, 因?yàn)楦鱾€(gè)在不同的Fat Thread中的IO子系統(tǒng)是完全隔離的(當(dāng)然, 同步肯定會(huì)發(fā)生在一些IO操作上, 但那都留給操作系統(tǒng)了).


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            韩国一区二区在线观看| 亚洲国产aⅴ天堂久久| 欧美一区二区视频网站| 日韩午夜剧场| 久久一区二区三区av| 亚洲一区久久久| 国产精品日本一区二区| 亚洲一级在线观看| 久久久精品一品道一区| 狠狠做深爱婷婷久久综合一区 | 亚洲精品久久久久久久久久久久久 | 亚洲在线成人| 小黄鸭精品aⅴ导航网站入口 | 一本色道久久综合亚洲91| 国产精品久久精品日日| 欧美一级网站| 最新国产成人在线观看| 亚洲伊人第一页| 欧美一区二区视频在线| 女同一区二区| 亚洲自拍偷拍福利| 欧美一区二区三区精品| 久久综合给合久久狠狠色| 一本色道久久综合一区| 午夜精彩视频在线观看不卡| 亚洲日本理论电影| 国产久一道中文一区| 欧美精品午夜| 久久大香伊蕉在人线观看热2| 欧美成人午夜剧场免费观看| 久久国产毛片| 亚洲欧美中文另类| 久久影视精品| 亚洲午夜视频在线观看| 卡一卡二国产精品| 欧美在线视频免费播放| 亚洲欧美国产va在线影院| 日韩一级片网址| 亚洲欧洲在线视频| 欧美一二区视频| 欧美色区777第一页| 欧美91大片| 久久久亚洲综合| 久久婷婷综合激情| 欧美午夜精品一区| 国产精品成人一区二区三区吃奶 | 一区二区毛片| 亚洲国产日韩一区二区| 亚洲福利在线观看| 亚洲欧美日韩久久精品| 亚洲一区二区不卡免费| 亚洲专区在线视频| 亚洲电影有码| 亚洲激情图片小说视频| 久久激情五月激情| 国产偷国产偷精品高清尤物| 国产日韩1区| 国内一区二区三区在线视频| 亚洲欧美999| 9久re热视频在线精品| 99www免费人成精品| 欧美成人r级一区二区三区| 欧美国产日韩a欧美在线观看| 欧美精品久久天天躁| 最新亚洲一区| 亚洲欧美日韩天堂| 中文在线不卡视频| 久久丁香综合五月国产三级网站| 国产精品你懂的| 一区二区三区自拍| 亚洲黄网站黄| 亚洲一级二级在线| 亚洲精品欧美极品| 亚洲欧美日韩成人高清在线一区| 欧美一级视频免费在线观看| 国产欧美精品一区| 久久看片网站| 亚洲免费成人av电影| 欧美日韩在线播放三区四区| 国产色婷婷国产综合在线理论片a| 欧美一级久久久| 久久不射2019中文字幕| 伊人久久综合97精品| 亚洲午夜未删减在线观看| 一片黄亚洲嫩模| 欧美成人综合在线| 夜夜爽www精品| 亚洲一区二区免费视频| 久久久久在线观看| 亚洲精品欧美日韩专区| 一本久道久久综合狠狠爱| 国产精品推荐精品| 欧美xxx在线观看| 欧美日韩精品三区| 亚洲国产高清aⅴ视频| 亚洲高清不卡av| 欧美午夜精品电影| 久久躁狠狠躁夜夜爽| 欧美精品一区二区高清在线观看| 性8sex亚洲区入口| 可以看av的网站久久看| 亚洲影院一区| 麻豆精品精华液| 精东粉嫩av免费一区二区三区| 亚洲观看高清完整版在线观看| 国产精品久久国产精麻豆99网站| 亚洲国产成人精品女人久久久 | 在线一区视频| 一区在线视频| 亚洲一二三四区| 91久久亚洲| 久久精品午夜| 国产欧美精品va在线观看| 亚洲福利视频专区| 狠狠色丁香婷综合久久| 制服诱惑一区二区| 亚洲另类自拍| 日韩一区二区福利| 亚洲第一黄网| 亚洲春色另类小说| 久久这里有精品视频| 亚洲一区在线看| 欧美成人免费全部| 男人插女人欧美| 韩国成人精品a∨在线观看| 亚洲午夜羞羞片| 在线一区欧美| 欧美日韩亚洲视频一区| 亚洲破处大片| 亚洲国产天堂久久综合| 欧美专区在线观看一区| 欧美在线精品免播放器视频| 欧美一区二区三区免费视频| 夜夜嗨av色综合久久久综合网| 免费不卡在线观看| 免费在线亚洲欧美| 亚洲第一天堂无码专区| 久久中文精品| 亚洲二区在线观看| 亚洲日本一区二区| 欧美精品成人一区二区在线观看| 欧美激情一区二区三区在线| 欧美日韩国产首页在线观看| 亚洲国产精品福利| 99re66热这里只有精品4| 欧美精品一区在线| 久久成人精品| 国语自产偷拍精品视频偷| 欧美尤物一区| 欧美1级日本1级| 99精品黄色片免费大全| 欧美午夜不卡视频| 亚洲一区二区三区影院| 久久久精品tv| 亚洲国内在线| 欧美日韩国产色视频| 亚洲一区二区三| 久久香蕉国产线看观看网| 亚洲福利小视频| 欧美视频在线免费| 欧美一区午夜精品| 亚洲第一在线综合在线| 亚洲一区二区欧美日韩| 国产午夜精品久久久久久久| 久久夜色精品国产欧美乱极品| 亚洲欧洲日本mm| 久久国产一区二区| 亚洲国产一区二区a毛片| 欧美精品一区二区三区一线天视频 | 国产揄拍国内精品对白| 91久久久国产精品| 日韩视频在线观看| 国产精品视频男人的天堂| 久久精品国产77777蜜臀| 亚洲丰满在线| 久久久久国内| 中文av一区特黄| 欧美激情精品久久久久久黑人 | 久久―日本道色综合久久| 亚洲区一区二| 国产欧美精品在线| 欧美顶级艳妇交换群宴| 亚洲欧美一区二区在线观看| 欧美激情第3页| 久久aⅴ乱码一区二区三区| 亚洲欧洲久久| 韩国女主播一区二区三区| 欧美三级电影精品| 美国三级日本三级久久99| 亚洲免费在线精品一区| 亚洲人成网站999久久久综合| 久久精品91久久香蕉加勒比 | 影音先锋久久久| 欧美日韩在线三级| 免费视频一区| 久久综合九色| 久久久久久夜精品精品免费| 亚洲欧美成aⅴ人在线观看| 亚洲精选一区二区| 欧美激情精品久久久六区热门 |