首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >akka将任务拆分为较小的结果并将其折叠

akka将任务拆分为较小的结果并将其折叠
EN

Stack Overflow用户
提问于 2012-12-22 19:02:43
回答 2查看 1.5K关注 0票数 3

问题是关于Akka演员库。一个想要把一个大任务分成小任务,然后把它们的结果折叠成一个“大”的结果。这将给我更快的计算利润。如果小任务是独立的,则可以并行计算它们。

假设我们需要像这样计算。函数count2X是耗时的,因此在一个线程中多次使用它并不是最优的。

代码语言:javascript
复制
//NOT OPTIMAL
def count2X(x: Int) = {
  Thread.sleep(1000)
  x * 2
}

val sum = count2X(1) + count2X(2) + count2X(3)
println(sum)

问题来了。

如何分派任务并收集结果,然后折叠,所有这些任务都使用akka参与者?是由Akka提供的,还是我需要自己实现?在这种方法中什么是最佳实践。

以下是对我问题的“视觉”解释:

代码语言:javascript
复制
             /-> [SMALL_TASK_1] -\
[BIG_TASK] -+--> [SMALL_TASK_1] --> [RESULT_FOLD]
             \-> [SMALL_TASK_1] -/

下面是我的脚手架实现,缺少/坏的实现:)

代码语言:javascript
复制
case class Count2X(x: Int)

class Count2XActor extends Actor {
  def receive = {
    case Count2X(x) => count2X(x); // AND NOW WHAT ?
  }
}

case class CountSumOf2X(a: Int, b: Int, c: Int)

class SumOf2XActor extends Actor {
  val aCounter = context.actorOf(Props[Count2XActor])
  val bCounter = context.actorOf(Props[Count2XActor])
  val cCounter = context.actorOf(Props[Count2XActor])

  def receive = {
    case CountSumOf2X(a, b, c) => // AND NOW WHAT ? aCounter ! Count2X(a); bCounter ! Count2X(b); cCounter ! Count2X(c);
  }
}

val aSystem = ActorSystem("mySystem")
val actor = aSystem.actorOf(Props[SumOf2XActor])

actor ! CountSumOf2X(10, 20, 30)

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-24 00:49:21

在阿克卡,我会这样做:

代码语言:javascript
复制
val a = aCounter ? Count2X(10) mapTo[Int]
val b = bCounter ? Count2X(10) mapTo[Int]
val c = cCounter ? Count2X(10) mapTo[Int]
Await.result(Future.sequence(a, b, c) map (_.sum), 1 second).asInstanceOf[Int]

我确信还有更好的方法--在所有Future-s并行完成之后,在这里开始对结果进行求和,对于简单的任务来说,没关系,但通常不应该等待太长时间

票数 2
EN

Stack Overflow用户

发布于 2012-12-22 19:13:34

你可以做两件事:

1)使用Akka期货。这些允许您以异步方式分派操作并折叠它们。有关更多信息,请访问http://doc.akka.io/docs/akka/2.0.4/scala/futures.html

2)您可以将工作分派给多个“工人”参与者,然后让“主”参与者聚合它们,通过在消息本身中存储信息来跟踪哪些消息正在等待/处理。我有一个简单的股票报价例子,这里使用Akka演员:https://github.com/ryanlecompte/quotes

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14005650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档