scala / akka / stm设计用于大型共享状态?

时间:2011-08-02 14:44:40

标签: scala map shared akka stm

我是Scala和Akka的新手,正在考虑用它来解决问题。假设我有一个计算引擎(搜索解决方案)。我想通过为每个节点上的每个cpu提供自己的引擎实例,在cpus和跨节点并行化搜索。

引擎输入包含少量标量输入和非常大的哈希表。每个引擎实例将使用其标量输入对哈希表进行一些小的本地更改,计算好处,然后丢弃其更改(它们不需要由任何其他引擎实例提交/查看)。善意值将返回给将在结果中选择的协调员。

我正在阅读一些关于STM TransactionalMap作为共享状态的工具。这看起来很理想,但我并没有真正看到任何使用它作为共享状态的完整示例。

问题:

  • 演员/ stm模型是否适合此问题?
  • 您能举例说明如何分发共享状态吗? (它是Ref [TransactionalMap [,]]作为消息吗?
  • 在节点内分配共享状态与在不同节点之间分配共享状态有什么不同吗?

询问思想想知道,

阿伦

1 个答案:

答案 0 :(得分:1)

在处理共享内存方面,听起来STM不适合这里,因为您不希望在引擎实例中进行的更改提交到哈希表的共享副本。

相反,immutable HashMap可能更适合。地图中未更改的元素可由引擎实例共享,每个映射中的差异仅占用额外的内存空间。

演员模型很适合你想做的事情。为每个所需的引擎实例设置一个actor,并向其传递一个带有标量值和hashmap的消息。然后让它将结果返回给协调员。