4

据我了解 Akka 文档,Akka ActorSystem 包含自己的线程池来执行演员。我在一个也使用 Java8 期货的 Java 应用程序中使用 Akka;后者由 ForkJoinPool.commonPool() 执行。因此,actors 和 futures 使用不同的池,这可能会破坏隐藏在两个调度程序中的某些假设(例如,Akka 调度程序可能假设 futures 在 Akka 池上运行)。这会产生任何性能问题吗?

4

1 回答 1

3

关于 Actor 和 Future 的执行没有隐藏的假设:我们提供的唯一保证是任何给定的 Actor 在任何给定时间最多只能在一个线程上执行。Futures 没有这样的限制,只要 ExecutionContext(或 ThreadPool)决定运行它们,它们就会运行。

在将 Actors 与 Java8 Futures 结合使用时,您当然必须遵守所有相同的警告,这些注意事项也适用于 Scala Futures,请参阅文档。特别是,永远不要在 Future 任务或回调中触及 Actor 的任何东西(没有字段、没有方法)。只有那个ActorRef是安全的。

于 2015-04-09T05:55:08.170 回答