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

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>
            欧美大片免费久久精品三p| 午夜精品国产更新| 欧美成人精品| 麻豆9191精品国产| 亚洲人成在线观看网站高清| 亚洲国产日韩欧美在线动漫| 免费在线观看日韩欧美| 日韩一级成人av| 国产精品99久久久久久有的能看| 欧美三区视频| 久久久久久久91| 久久精品国产亚洲一区二区三区| 在线观看视频一区二区| 欧美激情免费观看| 欧美日韩午夜| 久久久久久成人| 猛干欧美女孩| 亚洲一区二区伦理| 久久精品噜噜噜成人av农村| 99国产精品久久| 亚洲欧美日韩一区二区三区在线| 精品va天堂亚洲国产| 亚洲人成77777在线观看网| 欧美日韩在线观看视频| 久久久水蜜桃| 欧美色一级片| 免费毛片一区二区三区久久久| 欧美暴力喷水在线| 久久久www免费人成黑人精品 | 亚洲午夜激情在线| 欧美一区二区视频在线| 99在线热播精品免费| 亚洲一品av免费观看| 国内久久婷婷综合| 99www免费人成精品| 伊人精品视频| 亚洲女人天堂成人av在线| 亚洲精品一区二区三区樱花| 欧美一级淫片aaaaaaa视频| 亚洲精品欧美精品| 久久精品综合一区| 欧美亚洲免费| 欧美日韩第一区| 男人的天堂亚洲在线| 国产欧美精品一区二区三区介绍| 欧美激情一区二区三区蜜桃视频 | 影音先锋久久久| 午夜精品av| 亚洲综合三区| 欧美日韩网站| 99在线热播精品免费99热| 亚洲欧洲一区二区天堂久久| 久久久五月婷婷| 国产精品色一区二区三区| 日韩亚洲一区在线播放| 国产亚洲毛片在线| 亚洲欧美日韩一区二区在线| 亚洲女ⅴideoshd黑人| 欧美日韩视频一区二区三区| 亚洲国产国产亚洲一二三| 影音先锋在线一区| 久久精品亚洲一区二区| 久久精品毛片| 精品1区2区| 久久久综合精品| 久久综合色婷婷| 尹人成人综合网| 久久尤物电影视频在线观看| 欧美.日韩.国产.一区.二区| 精品成人在线观看| 久久久亚洲精品一区二区三区 | 99国产麻豆精品| 9色精品在线| 欧美日韩在线三区| 一本大道久久a久久精二百| 亚洲精品一区二区三区蜜桃久| 欧美激情影院| aⅴ色国产欧美| 亚洲欧美日韩另类精品一区二区三区| 欧美理论在线| 99精品99| 久久久久成人精品| 在线精品观看| 欧美区一区二区三区| 9国产精品视频| 欧美一站二站| 在线观看欧美日韩| 欧美日韩国产美| 亚洲综合色噜噜狠狠| 久久久久久欧美| 亚洲毛片在线看| 国产精品免费观看在线| 久久久噜噜噜久久人人看| 亚洲国产网站| 欧美一区二区三区喷汁尤物| 在线成人av.com| 欧美日韩视频在线| 久久久久九九九| 日韩一级片网址| 久久久夜夜夜| 中文亚洲免费| 一区二区在线免费观看| 欧美日韩国产首页| 欧美中文字幕不卡| 亚洲精品美女久久7777777| 欧美一级视频免费在线观看| 亚洲精品1区2区| 国产欧美一区二区精品秋霞影院| 久热综合在线亚洲精品| 亚洲自拍另类| 99热免费精品在线观看| 久久青青草综合| 亚洲深夜福利| 韩日欧美一区二区| 欧美午夜电影在线| 欧美mv日韩mv国产网站| 亚洲欧美日本日韩| 夜夜嗨av一区二区三区免费区| 久久狠狠亚洲综合| 亚洲欧美大片| 一区二区三区成人精品| 欧美不卡在线| 久久久久一区| 午夜精品久久久久| a4yy欧美一区二区三区| 亚洲国产成人在线播放| 免费在线一区二区| 久久综合激情| 亚洲欧美日韩国产综合| 亚洲青涩在线| 亚洲国产欧美日韩精品| 国产亚洲aⅴaaaaaa毛片| 麻豆视频一区二区| 香蕉免费一区二区三区在线观看| 亚洲国产清纯| 亚洲激情校园春色| 亚洲第一级黄色片| 欧美福利网址| 欧美r片在线| 欧美激情91| 欧美国产高潮xxxx1819| 欧美黑人在线播放| 欧美激情中文不卡| 亚洲第一区色| 亚洲人成网站999久久久综合| 欧美va天堂| 亚洲电影第三页| 亚洲黄色成人网| 亚洲精品乱码视频| 99re6这里只有精品| 亚洲色诱最新| 午夜精品一区二区三区在线播放 | 亚洲高清三级视频| 亚洲国产精品成人综合| 亚洲日本va午夜在线电影| 亚洲精选在线观看| 一区二区三区日韩精品| 亚洲综合视频1区| 久久国产精品久久国产精品| 久久久精品五月天| 欧美激情精品久久久久久久变态| 欧美金8天国| 国产精品欧美日韩| 一区二区三区在线免费播放| 在线日韩日本国产亚洲| 亚洲美女中出| 亚洲欧美日韩视频一区| 久久噜噜噜精品国产亚洲综合| 免费亚洲一区二区| 亚洲精品一区二区三区四区高清 | 欧美国产综合| 国产精品久久久久久一区二区三区| 国产区欧美区日韩区| 狠狠爱综合网| 一区二区三区欧美在线| 久久国产精品久久w女人spa| 免费看成人av| 亚洲午夜三级在线| 麻豆91精品91久久久的内涵| 亚洲欧美国产日韩天堂区| 亚洲午夜精品17c| 久久er99精品| 亚洲国产黄色| 性视频1819p久久| 欧美日本免费| 国产一区二区黄| 一区二区成人精品| 久久影视三级福利片| 亚洲精品一区二区三区蜜桃久| 欧美综合二区| 国产精品qvod| 亚洲免费观看在线视频| 久久精品五月婷婷| 亚洲视频视频在线| 欧美精品首页| 免费观看30秒视频久久| 国产精品丝袜白浆摸在线| 亚洲人成在线播放网站岛国| 久久久一本精品99久久精品66| 国产精品99久久久久久有的能看|