五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

【開發(fā)日志補(bǔ)全計(jì)劃】關(guān)于時(shí)間膨脹(Time Dilation或簡稱TiDi)

2020-01-23 13:00 作者:木之本仁  | 我要投稿

原作者:CCP Veritas

原文:http://community.eveonline.com/devblog.asp?a=blog&nbid=2307?

?

  常言說,與卡機(jī)延遲之間的戰(zhàn)爭我們是一定贏不了的,因?yàn)橥婕铱偸强梢越懈嗟呐灤瑏?。這個(gè)說法從根本上看是正確的,而正視這個(gè)事實(shí)也對Gridlock小組的工作有重要的意義。除了之前的一些優(yōu)化工作之外,我們還想著手解決戰(zhàn)斗時(shí)卡裝備的問題,這樣當(dāng)服務(wù)器不堪重負(fù)時(shí),它也能比較合理地去應(yīng)對。這就是本篇開發(fā)日志要講的內(nèi)容。不過,在理解我們的做法之前,你先要明白我們目前的處境?,F(xiàn)在,當(dāng)服務(wù)器負(fù)載過高時(shí),它并沒有明確的機(jī)制去解決這一問題,負(fù)責(zé)常規(guī)操作的機(jī)制只是按照它自己的步調(diào)前行。游戲中某些有趣的現(xiàn)象正是出于這個(gè)原因。不過在進(jìn)一步闡述這個(gè)問題之前,我需要先對一些術(shù)語做出定義。
?

小任務(wù)(tasklet),調(diào)度程序(scheduler)和讓步(yielding)


  基本上來講,EVE的服務(wù)器運(yùn)行著一系列的任務(wù)——可能是對客戶端命令的回應(yīng),也可能是維持著裝備(不止裝備,幾乎所有的內(nèi)容)的正常狀態(tài)。它們被稱為小任務(wù)——你不需要知道為什么這么叫。但只要我們使用電腦,在特定某一時(shí)間內(nèi)就只能運(yùn)行一個(gè)小任務(wù),而且我們需要一種軟件來決定運(yùn)行哪個(gè)小任務(wù),這個(gè)就叫做調(diào)度程序。


  調(diào)度程序分為不同的形式,負(fù)責(zé)EVE中的小任務(wù)運(yùn)行的那種很簡單,是一種循環(huán)合作式多任務(wù)調(diào)度程序?!把h(huán)”意思是每一個(gè)小任務(wù)都有機(jī)會(huì)運(yùn)行,直到所有的小任務(wù)都運(yùn)行了一遍為止,沒有優(yōu)先級,沒有特殊待遇,非常公平不是嗎,誰都有機(jī)會(huì)。合作式多任務(wù)意思是每個(gè)小任務(wù)在執(zhí)行過程中都不會(huì)受到來自外部的干擾,它會(huì)一直運(yùn)行下去直到運(yùn)行完畢,或是走一種特殊的步驟,發(fā)出信號給調(diào)度程序,表明它希望讓其它小任務(wù)現(xiàn)在來運(yùn)行。這后一種情況就叫做讓步。


  所以這個(gè)系統(tǒng)就像這個(gè)樣子:

?


  你可能會(huì)自言自語“為什么有小任務(wù)會(huì)讓步呢?”這個(gè)……如果它們很自私的話,它們當(dāng)然不會(huì)讓步,而是會(huì)把自己的一切全部搞定之后再把機(jī)會(huì)讓給別的——往往也是不那么重要的任務(wù)。不過這樣做并不好,因?yàn)楠?dú)享CPU資源可不是個(gè)好主意。正因?yàn)槿绱?,?dāng)我們在編寫可能會(huì)用比較長的時(shí)間來執(zhí)行的程序時(shí),我們會(huì)在合適的地方添加讓步指令,這樣它和別的程序之間就能和諧共處了。


  小任務(wù)會(huì)做出讓步的另一個(gè)常見原因就是,它可能在等待來自其它地方——比如數(shù)據(jù)庫的指令輸入。一直停在那里等待返回指令并沒有任何意義,我們可以讓別的任務(wù)先來,而我們繼續(xù)在一旁等待。(嗯沒錯(cuò),這個(gè)就是基于I/O完成指令的暫停狀態(tài)。)


好吧伙計(jì),那你怎么處理它們呢?


  非常抱歉,下面我要涉及一些計(jì)算機(jī)科學(xué)方面的專業(yè)內(nèi)容了,它會(huì)解釋清楚小任務(wù)在高負(fù)載下的主要運(yùn)行方式。當(dāng)服務(wù)器負(fù)載過高時(shí),它在讓步之后至少5秒鐘才會(huì)開始下一個(gè)流程,這就導(dǎo)致任務(wù)無論是否順利執(zhí)行,都會(huì)花費(fèi)非常長的時(shí)間才能完成,因?yàn)樗恢痹诘却龍?zhí)行的流程。爆船就是個(gè)很好的例子——它會(huì)多次訪問數(shù)據(jù)庫,所以頻繁地進(jìn)行讓步,這就把整個(gè)完成時(shí)間拖得很長。同樣地,裝備的運(yùn)算流程有時(shí)會(huì)非常滯后,因?yàn)樘幚硭鼈兊男∪蝿?wù)會(huì)在進(jìn)行100毫秒的執(zhí)行之后做出讓步。


  上面說了那么多都是為了下面這句做鋪墊:


  EVE的服務(wù)器應(yīng)該將小任務(wù)等待執(zhí)行時(shí)的隊(duì)列時(shí)間降至最短——降到零最好。


  這就是時(shí)間膨脹的意義所在。


  要想在維持服務(wù)器正常運(yùn)行的情況下實(shí)現(xiàn)這一目標(biāo),我們的選擇并不多。基本上可以歸結(jié)為兩點(diǎn):降低負(fù)載或是提高運(yùn)算能力。


  Gridlock小組花了很多時(shí)間,試圖通過優(yōu)化的方式達(dá)到降低負(fù)載的目的。我們可以,而且也很有可能繼續(xù)為此而努力,而且也已經(jīng)搞定了這方面的一些簡單工作。使用多線程是提高運(yùn)算能力的一種方法,它可以提高每秒鐘的處理能力,但其實(shí)并沒有人們想象的那么多??傆幸惶煳覀兛梢詫?shí)現(xiàn),但是現(xiàn)階段它所需的工作量要遠(yuǎn)大于實(shí)際收益。


  調(diào)節(jié)負(fù)載現(xiàn)在看來是勢在必行了,因?yàn)槲覀円呀?jīng)完成了一大堆簡單的優(yōu)化工作。我們已經(jīng)制定了幾個(gè)不同的可行方案,最為大多數(shù)人認(rèn)可的一個(gè)方案,是將Destiny——我們的物理模擬器——進(jìn)行升級,這樣當(dāng)過載時(shí)它的每秒物理解析度將會(huì)降低。這樣做可以幫助我們減少實(shí)際的模擬工作量,不過只能降低5%-10%的負(fù)載,所以也不怎么劃算。


  另一個(gè)普遍的觀點(diǎn)是延長裝備的循環(huán)時(shí)間,相應(yīng)地提升效率與消耗。這樣我們會(huì)有更多的自由空間,但是會(huì)極大地改變游戲的設(shè)計(jì),改變的程度取決于負(fù)載的高低,這樣可不行?,F(xiàn)有的卡裝備現(xiàn)象已經(jīng)會(huì)改變游戲機(jī)制,所以為了不讓事情變得更糟,我們不予考慮這種方法。


  不過謝天謝地,我們終于找到了一種在不改變游戲設(shè)計(jì)的前提下有效控制負(fù)載的方法:將時(shí)間的流逝放緩。大型會(huì)戰(zhàn)中很大一部分負(fù)載與時(shí)間計(jì)算有關(guān)——裝備激活、物理模擬、飛行及躍遷等——這些都是在一定的時(shí)間內(nèi)完成的,所以將時(shí)間分割開來將會(huì)相應(yīng)地按比例降低他們的負(fù)載消耗。因此,我們的方法是將游戲時(shí)間放慢,盡量減少小任務(wù)執(zhí)行時(shí)的等待時(shí)間,而當(dāng)負(fù)載回歸常態(tài)時(shí),再將時(shí)間恢復(fù)正常。這個(gè)過程的執(zhí)行將是動(dòng)態(tài)的,并且有較細(xì)的檔位劃分,比如說,如果負(fù)載較輕的話,我們完全可以將時(shí)間調(diào)到正常的98%來運(yùn)行。


  好吧,那么在大型戰(zhàn)斗中它的表現(xiàn)如何?


  以下是我對它在大型會(huì)戰(zhàn)(比如1600人)中的表現(xiàn)的預(yù)想。當(dāng)敵人的艦隊(duì)躍遷進(jìn)來時(shí),服務(wù)器負(fù)載一下子變得很高(躍遷來去和放出無人機(jī)這類行為非常占用資源),于是游戲內(nèi)的時(shí)鐘也大大放緩,只有正常的5%左右。當(dāng)這些運(yùn)算都處理完畢后,服務(wù)器將允許時(shí)間恢復(fù)到正常的30%,這個(gè)時(shí)候戰(zhàn)斗打響了。我們要面對1600個(gè)同時(shí)發(fā)生的戰(zhàn)斗行為,他們的處理請求將迅速而平等地由服務(wù)器進(jìn)行處理,只不過要花費(fèi)比平時(shí)長三倍的時(shí)間。玩家們將會(huì)感受到艦船界面中裝備循環(huán)變慢了,爆炸的動(dòng)畫也變慢了。伴隨著一陣煙花,艦船減少到1200艘了,那么我估計(jì)時(shí)間將恢復(fù)到正常的60%。這時(shí)候一方的指揮官覺得大勢已去,呼叫撤退。躍遷是很占資源的,所以隨著艦船的離開,時(shí)間又大大變慢,到了正常的10%。最后戰(zhàn)斗結(jié)束了,失敗者也逃掉了,服務(wù)器負(fù)載變得很低,所以時(shí)間就恢復(fù)正常了。


  當(dāng)然這里面還有些很棘手的設(shè)計(jì)問題,比如說計(jì)時(shí)器遭遇時(shí)間膨脹會(huì)怎樣。我覺得大多數(shù)情況下這個(gè)問題容易解決——如果增強(qiáng)模式計(jì)時(shí)器也能夠被膨脹的話,那么玩家就可以在增強(qiáng)模式快結(jié)束的時(shí)候進(jìn)行移動(dòng),這和我們的設(shè)計(jì)初衷相悖,所以增強(qiáng)模式計(jì)時(shí)器是不可以隨著時(shí)間膨脹的。而另一方面,護(hù)盾的回充是持續(xù)性的,在戰(zhàn)斗中具有重要意義,所以它必須要隨時(shí)間膨脹而膨脹?;驹瓌t就是,如果某件事情是偏重于現(xiàn)實(shí)中的時(shí)間的,那么它就不可以被膨脹。如果你覺得哪些情況不應(yīng)該牽涉到時(shí)間膨脹,請?jiān)诠俜秸搲辛粞浴?/p>


合理預(yù)期!


  時(shí)間膨脹并不是萬能的。有些負(fù)載和時(shí)間毫無關(guān)聯(lián),所以我們不能處理規(guī)模不確定的戰(zhàn)斗。我今天提到的應(yīng)該已經(jīng)涵蓋了所有的常見情況。不過,我覺得我們應(yīng)該為時(shí)間膨脹設(shè)定一個(gè)硬性的限制。在某個(gè)星系中出現(xiàn)0.1%的時(shí)間流速毫無意義,因?yàn)闀r(shí)間幾乎靜止,你什么都干不了。我不知道這個(gè)臨界值將是多少——具體的還要等看看今后的部署效果再說。如果實(shí)際戰(zhàn)斗中總是會(huì)突破這個(gè)臨界值的限制,那我們就又回到現(xiàn)在這種服務(wù)器無響應(yīng)而且時(shí)不時(shí)抽風(fēng)的狀態(tài)了。一切等待時(shí)間檢驗(yàn)吧。


  這篇日志很長,而且談?wù)摰氖且豁?xiàng)試驗(yàn)性的內(nèi)容。時(shí)間膨脹這個(gè)想法我早已有之,但直到今天也沒有實(shí)際上投入太多的工作。我們?nèi)ツ臧嗽伦鲞^一個(gè)試驗(yàn)品來測試游戲是否能夠處理得了膨脹的時(shí)間,之后直到今天再無建樹。我在全球玩家聚會(huì)上得到了大量的積極反饋,再加上星際管理委員會(huì)(CSM)將此作為他們最強(qiáng)烈的愿望,這些都激勵(lì)了我,讓我覺得是時(shí)候?qū)⑵渫瞥隽恕_@可是一項(xiàng)大工程,所以2011年夏天你們就不要想看到它了。一切順利的話,在秋季上線還是有希望的。


太長了,總結(jié)一下吧


  時(shí)間膨脹的作用是將時(shí)間放慢,這樣服務(wù)器就有足夠的時(shí)間來處理你的請求。我們將會(huì)開始著手進(jìn)行這項(xiàng)工作,如果一切順利,它將在一段時(shí)間后與玩家見面。

【開發(fā)日志補(bǔ)全計(jì)劃】關(guān)于時(shí)間膨脹(Time Dilation或簡稱TiDi)的評論 (共 條)

分享到微博請遵守國家法律
丹棱县| 萨迦县| 鄄城县| 东安县| 开封市| 台南县| 镇远县| 涞源县| 万山特区| 南通市| 弋阳县| 金湖县| 桃园市| 绥中县| 平邑县| 屏南县| 时尚| 道孚县| 宿松县| 洪湖市| 田林县| 常山县| 溧阳市| 衡山县| 株洲市| 西林县| 昆明市| 保德县| 六枝特区| 维西| 黎平县| 阿鲁科尔沁旗| 城步| 青田县| 通榆县| 喜德县| 车致| 中牟县| 绍兴市| 镇远县| 蒲城县|