Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang 每个模拟对象一个参与者,还是一个管理者参与者?_Erlang_Actor - Fatal编程技术网

Erlang 每个模拟对象一个参与者,还是一个管理者参与者?

Erlang 每个模拟对象一个参与者,还是一个管理者参与者?,erlang,actor,Erlang,Actor,我正在开发一个模拟,它将以许多实体不断更新为特征,可能每秒更新30次。让我们想象一下,我们有1000个实体,每个实体都有一个速度,因此每个滴答声都必须更新一个位置 那么,您将如何使用actor模型实现这一点呢?我不一定要在这个项目中使用Erlang,但是为了论证起见,让我们假设我是。这些实体中的每一个都有一个参与者吗?或者您是否会有一个“管理者”参与者来维护和更新这些实体的列表 : Erlang进程确实很轻:可以有数百个 成千上万的人同时存在,但这并不意味着 你必须这样使用它,因为你可以。例如

我正在开发一个模拟,它将以许多实体不断更新为特征,可能每秒更新30次。让我们想象一下,我们有1000个实体,每个实体都有一个速度,因此每个滴答声都必须更新一个位置

那么,您将如何使用actor模型实现这一点呢?我不一定要在这个项目中使用Erlang,但是为了论证起见,让我们假设我是。这些实体中的每一个都有一个参与者吗?或者您是否会有一个“管理者”参与者来维护和更新这些实体的列表

:

Erlang进程确实很轻:可以有数百个 成千上万的人同时存在,但这并不意味着 你必须这样使用它,因为你可以。例如 创建一个射击游戏,其中包括子弹在内的一切都是自己的 那个演员是疯子。在这样的游戏中,你唯一能做的就是 你自己的脚。发送邮件的成本仍然很小 演员对演员,如果你划分任务太多,你会把事情搞砸 慢点


因此,这似乎表明管理者会更好。还是有第三种选择我没有看到?

你说吧!没有一个好的解决办法

现在,为了更有帮助,在我所掌握的一些背景知识的基础上,我认为您应该看看您的项目的以下方面:

你说模拟。如果需要每隔30毫秒刷新一次实体集合,首先要简化操作和数据模型,然后再考虑如何有效地遍历数据集合

另一方面,如果你有一个庞大的和/或不断发展的对象集合,有着琐碎的算法/数据模型,那么看看比列表更智能的数据结构,注意数据拷贝

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

接下来想想这些小组是否可以帮助您减少评估次数(有一个自适应时间片?按需评估?…)

最后,我认为Erlang比一般来说更紧凑,易于重构,因此利用这一点定义一些功能步骤,并针对每一个步骤

让他们工作,让他们正确,然后快速(肯特贝克?)

对于最后一步,您可以从分析工具(如fproof)获得一些帮助


勇气:o)

我想了解一些Erlang在这里犯了一个过早的优化错误。您应该使用对您最有意义的抽象,度量任何问题,并在必要时进行重构。就我个人而言,我认为将每个粒子建模为它自己的参与者是最容易处理的,也是参与者模型最惯用的方法。然而,实际上,你应该做任何能让你的船漂浮的事情