Scala演员智能路由

时间:2012-01-31 10:53:50

标签: multithreading scala actor akka

我需要用较少(即3个)演员执行一些(比方说10个)任务。

但我不想在开始时分发所有任务,因为执行时间可能会有所不同。这就是为什么我需要向他们发送1个任务,当任何完成时他将被赋予一项新任务。这样,当第一个任务需要3秒钟并且只能休息时,可以在3秒内完成约0.5秒的作业。

有10个任务列表:

(() => Thread.sleep(3000); println("done long"}) :: (1..9).map({() => println("done short")})

我想要输出:

done short
done short
done short
done short
done short
done short
done short
done short
done short
done long

我可以写经理演员,让演员回到经理并再次重新分配工作,但我希望在Scala或Akka中找到一个固定的解决方案。

1 个答案:

答案 0 :(得分:3)

Akka支持Dispatchers,特别是偷工作。查看this帖子了解详细信息。