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

All*_*anC 6 shared scala map stm akka

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

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

我正在阅读一些关于STM TransactionalMap作为共享状态的工具.这似乎是理想的,但我没有看到任何使用它作为共享状态的完整示例.

问题:

  • actor/stm模型是否适合此问题?
  • 您能否展示一个如何分发共享状态的具体示例?(它是Ref [TransactionalMap [,]]作为消息吗?
  • 在节点内分配共享状态与在不同节点之间分配有什么不同吗?

探究思想想知道,

艾伦

Dav*_*gen 1

就处理共享内存而言,STM 听起来并不适合这里,因为您不希望将引擎实例中所做的更改提交到哈希表的共享副本。

相反,不可变的 HashMap可能更适合。映射中不变的元素可以由引擎实例共享,只有每个映射中的差异占用额外的内存空间。

演员模型非常适合您想做的事情。为您想要的每个引擎实例设置一个参与者,并向其传递一条包含标量值和哈希图的消息。然后让它将结果返回给协调器。