1

因此,我目前正致力于将我的 Scala 代码分布在多台机器上以获取大图(问题的“第 1 部分”),并且目前正在使用 Akka 框架,希望能够使用 Actors 和 Remoting。

我在这里阅读了文档,似乎可以将示例的完成方式扩展到做我想做的事情,但我对这种方法有一些担忧......

1)我们如何决定我们应该创建多少个Actor实例?我们是否必须做一个试错的事情来看看哪个是最好的,还是有一些更直观的方法来解决它?

2)我正在考虑以类似于示例的方式完成我的任务 - 使用一个产生多个工人并使用案例类作为消息进行通信的 Master。我想要做的是在所有顶点对之间找到一些度量(随机游走)。我有一个图形类,它实现了一种计算给定两个顶点的度量的方法。

我会给每个工人两个顶点'u'和'v'来计算度量,并让工人返回值。

当 Master 向 Workers 发送消息以计算度量时,Worker 需要图形结构 - 我是否只需在消息中包含图形结构(即邻接列表,即 HashMap)来做到这一点?这是否会通过每次复制图结构而导致任何开销,或者所有工作人员都只是共享该图,还是有更好的方法来解决这个问题?

3)计算顶点对之间度量的算法是否需要重新实现到扩展的Actor类,或者有没有办法让各个Actor访问相同的图结构来调用方法(我猜这类似于上面关于将整个图形结构作为消息的一部分传递的问题)?

谢谢!问候,-kstruct

4

1 回答 1

3

1)我们如何决定我们应该创建多少个Actor实例?

尽管 Actor 抽象了底层线程管理,但创建的 Actor 少于可用的 CPU 内核正在浪费计算能力。如果您有 10 台服务器,每台服务器 8 个内核,则创建至少 80 个参与者,每台机器 8 个。

如果算法是 CPU 密集型的,那么创建更多不会给您带来性能提升 - 额外的工作人员只会等待可用的核心。

[...] Worker 需要图形结构 - 我是否只是通过在消息中包含图形结构(即,作为 HashMap 的邻接列表)来做到这一点?[...]

如果您的所有参与者都位于同一个 JVM 中,则不会产生任何开销——您只需在消息中传递对图形结构的引用。然而,在分布式环境中,这将导致图形被序列化并通过线路发送 - 可能是大量数据。

考虑由所有参与者共享此数据结构。

我不明白问题3。

于 2012-04-13T19:48:54.063 回答