Akka演员和Java8 CompletableFuture可以安全地结合吗?

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

3

关于Actors和Futures的执行,我们没有任何隐藏的假设:我们唯一能保证的是,任何给定的Actor在任何给定时间只会在至多一个线程上执行。而对于Futures,它们不受此类限制,它们将在ExecutionContext(或ThreadPool)决定运行它们时运行。

当将Actors与Java8 Futures结合使用时,您当然必须遵守与Scala Futures相同的注意事项,请参见文档。特别地,在Future任务或回调中永远不要触及Actor的任何内容(无论是字段还是方法),只有ActorRef是安全的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接