2013-03-04 62 views
0

我正在开发一种模拟功能,它将以不断更新的实体为特征,每秒可能有30次。让我们想象一下,我们有1000个实体,每个实体都有一个速度,因此每个实体都必须更新一个位置。每个模拟对象一个演员,还是一个经理演员?

那么,你将如何使用演员模型来实现这一点?我不一定在这个项目中使用Erlang,但为了争辩,我们只是说我是。你会为每个这些实体有一个演员吗?或者你会有一个“经理”演员来维护和更新这些实体的列表?

Learn You Some Erlang says

这是事实,Erlang进程很轻:你可以有成千上万的人存在在同一时间 ,但这并不意味着 你必须使用它是只因为你可以。例如, 创建一个射击游戏,其中包括子弹的所有东西都是它自己的 演员是疯狂的。你用这样的游戏拍摄的唯一的东西就是你自己的脚 。从 演员向演员发送消息的成本仍然很低,如果您将任务分配得太多,您会使事情变慢 !

所以这似乎表明,管理人员会更好。还是有第三种选择,我没有看到?

回答

0

你这么说!没有一个好的解决方案。

我们提供更多的帮助,并与一些背景我有,我想你应该看看你的项目的以下方面:

你说的模拟。如果您需要每30ms刷新一组实体,首先要简化操作和数据模型,然后再考虑如何有效地遍历数据收集。

在另一端,如果你有一个巨大的和/或发展的对象集合,琐碎的算法/数据模型,再看看比列表更聪明的数据结构,利用数据复制照顾......

如果您使用多核(或集群),那么可以考虑将您的实体分组到几个超级实体中,以充分利用并行性,并在不同的进程中管理它们。

接下来认为,如果这些组可以帮助您减少评估次数(具有自适应时间片?按需评估?)。

最后,我觉得比一般来讲,Erlang是结构紧凑,易于重构,因此利用这一优势的定义一些功能性的步骤,并为他们每个人,

使他们的工作,使他们的权利并再快(肯特·贝克?)

对于最后一个步骤中,您可以从分析工具一些帮助,如fproof

勇气:O)

0

我想学你一些Erlang在这里犯了一个过早的优化错误。您应该使用哪种抽象概念对您最有意义,衡量任何问题,并在必要时进行重构。就我个人而言,我认为将每个粒子建模为其自己的演员将是最容易处理的,并且也是Actor模型中最习惯的方法。不过,实际上,你应该做任何漂浮你的船。