我正在开发一个模拟,它将使许多实体不断更新,可能每秒30次。让我们假设我们有1000个实体,每个实体都有一个速度,因此每个刻度都必须更新一个位置。
那么,你将如何使用actor模型实现它?我不一定在这个项目中使用Erlang,但为了争论,让我们说我就是。你们每个实体都有一个演员吗?或者你会有一个“经理”演员来维护和更新这些实体的列表吗?
Erlang流程确实很轻松:你可以有数百个 其中数千个同时存在,但这并不意味着 你必须以这种方式使用它,因为你可以。例如, 创造一个射击游戏,包括子弹在内的所有东西都是它自己的 演员很疯狂。你唯一能用这样的游戏拍摄的是 你自己的脚。发送消息的成本仍然很低 演员到演员,如果你把任务分得太多,你就会做出决定 慢!
所以这似乎表明管理者会更好。或者我没有看到第三种选择?
答案 0 :(得分:0)
你说出来!没有一个好的解决方案。
现在更有帮助,而且我的背景很少,我认为你应该看看你项目的这些方面:
你说模拟。如果需要每30ms刷新一次实体集合,首先要简化操作和数据模型,然后再考虑如何有效地遍历数据集合。
另一方面,如果你有一个巨大的和/或不断发展的对象集合,使用简单的算法/数据模型,那么看一下比列表更智能的数据结构,处理数据副本......
如果您使用多核(或群集),那么请考虑将您的实体分组到多个超级实体中,以便利用并行性,在不同的流程中管理它们。
接下来想想这些小组是否可以帮助您减少评估次数(有一个自适应时间片?按需评估?......)。
最后,我认为,一般来说,Erlang是紧凑的,易于重构,因此利用这个来定义一些功能步骤,并为每个步骤,
让他们工作,使他们正确,然后快速(肯特贝克?)
对于最后一步,您可以从分析工具(如fproof
)获得一些帮助勇气:o)
答案 1 :(得分:0)
我认为学习一些Erlang在这里做了一些不成熟的优化失误。您应该使用哪种抽象对您最有意义,测量任何问题,并在必要时进行重构。就个人而言,我认为将每个粒子建模为自己的角色是最容易处理的,也是Actor模型中最惯用的方法。然而,实际上,你应该做任何漂浮在船上的事情。