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

标签 scala map shared akka stm

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

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

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

问题:

  • actor/stm 模型看起来适合这个问题吗?
  • 你能展示一个如何分配共享状态的具体例子吗? (是 Ref[TransactionalMap[,]] 作为消息吗?
  • 与跨不同节点相比,在节点内分配共享状态有什么不同吗?

  • 好奇心想知道,

    艾伦

    最佳答案

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

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

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

    关于用于大型共享状态的 scala/akka/stm 设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913902/

    相关文章:

    java - 在 java 中创建 <char, int> 的无序映射

    c - 复杂类型的 mmap 问题

    linux - 加载共享库时出错 : unexpected reloc type 0x7e

    c++ - 当父类共享指针为返回类型时返回新的基类

    java - 如何从 Java 调用具有数字参数的 Scala 方法

    scala - scala : mystified by warning 中的模式匹配零参数函数

    ruby - 为什么要在框架 Web 服务器前面使用 http 服务器?

    list - 如果你在 rackect 中将一个函数映射到一个列表上,你如何获得对下一个元素的引用?

    python - 具有多个 for 子句的列表理解的 Map/reduce 等价物

    java - Scala 中的新 Java 类 : takes type paremeters