比方說,我有一個域模型,即時嘗試與多線程兼容。 原型域是由Space,SpaceObject和Location對象組成的遊戲域。 SpaceObject有Move方法和Asteroid並且Ship擴展這個對象具有對象的特定屬性(Ship有一個名稱並且Asteroid有一個顏色)C#多線程域設計
比方說,我想讓每個對象的Move方法運行在單獨的線程。這將是愚蠢的,因爲有10000個對象,我會有10000個線程。核心/線程之間分離工作負載的最佳方式是什麼?
我正在嘗試學習併發的基礎知識,並構建一個小型遊戲來構建很多概念的原型。
我已經做了什麼,是建立一個域,並帶有定時器的線程模型,該定時器根據間隔啓動事件。如果發生事件,我想用任何SpaceObject的新位置更新我的整個模型。 但是我不知道在事件發生時如何以及何時用工作負載啓動新線程。
有些工作人員告訴我,你無法更新你的核心域多線程,因爲你必須同步一切。但在這種情況下,我無法在雙核四核服務器上運行我的遊戲,因爲它只會使用1個CPU來完成最困難的任務。
任何人都知道該怎麼辦?
規格的反應Deltreme:
你是正確的是絕對,你的方法在大多數情況下工作。但是, 線程必須更新Space類中的spaceobject的位置。
比方說,我有兩個SpaceObjects旁邊的彼此,他們正在走向彼此。 1對象位於線程A中,另一個位於線程B中。 一旦我更新對象,線程必須一起寫入空間,以在Tile(空間的單獨部分)中寫入新值。那個人通話不能在不同的線程同時進行,造成空間物體就會爆發......
什麼都可能發生的碰撞,我可以寫,如果他們有2艘@ 1瓦時發生的事件。這不是問題。
我在考慮10000艘船的情況下,CPU主要是在線程之間切換,而不是全部運行它們。因此,爲了提高性能,我希望能夠同時「一切」
謝謝,這很有幫助,這意味着我可以在最壞的情況下優化0%,在最好的情況下可以優化0%。你知道有什麼方法可以提高這些賠率嗎? – 2010-04-07 10:03:06