2015-04-08 48 views
3

就我所瞭解的Akka文檔而言,Akka ActorSystem包含自己的線程池來執行參與者。我在也使用Java8期貨的Java應用程序中使用Akka;後者由ForkJoinPool.commonPool()執行。因此,演員和期貨使用不同的池,這可能會挫敗隱藏在兩個調度器中的某些假設(例如Akka調度器可能假定期貨在Akka池中運行)。這是否會造成任何性能問題?可以將Akka actors和Java8 CompletableFuture安全地結合在一起嗎?

回答

2

關於執行者和期貨的執行沒有任何隱藏的假設:我們給出的唯一保證是任何給定的執行者在任何給定時間最多隻能執行一個線程。期貨沒有觀察到這樣的限制,只要ExecutionContext(或ThreadPool)決定運行它們,它們就會運行。

當將Actors與Java8期貨相結合時,您當然也必須遵守所有相同的注意事項,這些也適用於Scala期貨,請參閱the docs。特別是,不要在未來任務或回調中觸摸Actor的任何內容(無字段,無方法)。只有ActorRef是安全的。

相關問題