2013-03-04 64 views
0

我正在開發一種模擬功能,它將以不斷更新的實體爲特徵,每秒可能有30次。讓我們想象一下,我們有1000個實體,每個實體都有一個速度,因此每個實體都必須更新一個位置。每個模擬對象一個演員,還是一個經理演員?

那麼,你將如何使用演員模型來實現這一點?我不一定在這個項目中使用Erlang,但爲了爭辯,我們只是說我是。你會爲每個這些實體有一個演員嗎?或者你會有一個「經理」演員來維護和更新這些實體的列表?

Learn You Some Erlang says

這是事實,Erlang進程很輕:你可以有成千上萬的人存在在同一時間 ,但這並不意味着 你必須使用它是隻因爲你可以。例如, 創建一個射擊遊戲,其中包括子彈的所有東西都是它自己的 演員是瘋狂的。你用這樣的遊戲拍攝的唯一的東西就是你自己的腳 。從 演員向演員發送消息的成本仍然很低,如果您將任務分配得太多,您會使事情變慢 !

所以這似乎表明,管理人員會更好。還是有第三種選擇,我沒有看到?

回答

0

你這麼說!沒有一個好的解決方案。

我們提供更多的幫助,並與一些背景我有,我想你應該看看你的項目的以下方面:

你說的模擬。如果您需要每30ms刷新一組實體,首先要簡化操作和數據模型,然後再考慮如何有效地遍歷數據收集。

在另一端,如果你有一個巨大的和/或發展的對象集合,瑣碎的算法/數據模型,再看看比列表更聰明的數據結構,利用數據複製照顧......

如果您使用多核(或集羣),那麼可以考慮將您的實體分組到幾個超級實體中,以充分利用並行性,並在不同的進程中管理它們。

接下來認爲,如果這些組可以幫助您減少評估次數(具有自適應時間片?按需評估?)。

最後,我覺得比一般來講,Erlang是結構緊湊,易於重構,因此利用這一優勢的定義一些功能性的步驟,併爲他們每個人,

使他們的工作,使他們的權利並再快(肯特·貝克?)

對於最後一個步驟中,您可以從分析工具一些幫助,如fproof

勇氣:O)

0

我想學你一些Erlang在這裏犯了一個過早的優化錯誤。您應該使用哪種抽象概念對您最有意義,衡量任何問題,並在必要時進行重構。就我個人而言,我認爲將每個粒子建模爲其自己的演員將是最容易處理的,並且也是Actor模型中最習慣的方法。不過,實際上,你應該做任何漂浮你的船。