我正在开发一个应用程序,它在一个不可变的数据结构上进行大量的数字运算。(一个非常大的数组的集合--本质上是一个大的矩阵。假设一个典型的大小是200列乘以100,000行的双精度。)许多计算可以以不同的方式并行化,我想利用Akka角色模型来解决这个问题。
我担心必须在消息中传递这个矩阵(或其中的一部分),因为我认为这将涉及到大量的复制和序列化。
我是不是想多了这个问题?(也就是说,如果一个主管参与者将这个矩阵的一些数组传递给它的下属,那么Akka运行时是否足够智能,可以将其作为引用传递--假设它们保持在同一个JVM上--而不是将所有内容序列化为传递的消息?)
我想问这个问题的更简单的方法是:应该避免在消息中传递大量数据结构的情况吗?
我只想重申一下:这些数据是完全不变的。它永远不会改变。
发布于 2016-09-02 16:34:35
只有当您发送到remote actor (或者,扩展到集群节点)时,Akka才会序列化消息。远程并不一定意味着涉及到适当的网络;它可以是同一台机器上的不同JVM (通过环回接口)。如果在没有任何远程处理的JVM上有一个参与者系统,那么只传递一个引用,就像您将消息放在一个队列上并拥有一个不同的Thread it一样。
发布于 2016-09-03 05:23:51
通常,不应该将非常大的数据结构传递给远程参与者。相反,将您的数据结构上传到某种类型的持久性blob存储(HDFS、S3等),并发送一条消息告诉远程参与者新数据可供处理。
https://stackoverflow.com/questions/39282117
复制相似问题