Seguendo questo blog di @Tomasz Nurkiewicz possiamo vedere che sono disponibili 4 diversi approcci per scegliere ExecutionContext, quando si interagisce con gli attori di akka, affinché i futuri su scala vengano eseguiti.
import ExecutionContext.Implicits.global
//or
implicit val ec = ExecutionContext.fromExecutorService(Executors.newFixedThreadPool(50))
//or (inside actor)
import context.dispatcher
//or (explicitly)
val future = Future {
//...
} (ec)
Solo uno è specifico di akka, il resto è agnostico al fatto che la concorrenza viene gestita da attori, altrove.
Dato che ci sono situazioni in cui la gestione della concorrenza con i futuri e degli attori è inevitabile (ad esempio, la mia domanda su SO riguardo a slick ), quale paradigma si adatterebbe meglio? Esecuzione del futuro sul dispatcher dell'attore o su una delle altre possibilità, come illustrato sopra?
BTW, rileggendo la mia domanda su SO, vedo che ho usato il Global ExecutionContext di Scala, ma i log registrano i thread che gestiscono il codice futuro come appartenente al dispatcher di default di ActorSystem ... che cosa sta succedendo ???
EDIT,
è tornato alla domanda SO di cui sopra e ricreato l'esempio. Il mondo ha più senso, come i seguenti log sono apparsi (possiamo vedere che il forkJoinPool globale predefinito viene invocato in futuro mentre il dispatcher predefinito è usato per gli attori):
[INFO] [11/04/2015 09:29:06.267] [wtf-akka.actor.default-dispatcher-3] [akka://wtf/user/$a] ['wtf1] external block pre future
[INFO] [11/04/2015 09:29:06.287] [wtf-akka.actor.default-dispatcher-3] [akka://wtf/user/$a] ['wtf1] external block post future
[INFO] [11/04/2015 09:29:06.287] [ForkJoinPool-2-worker-7] [akka://wtf/user/$a] ['wtf1] internal block pre sleep
[INFO] [11/04/2015 09:29:06.461] [wtf-akka.actor.default-dispatcher-2] [akka://wtf/user/$a] ['wtf2] external block pre future
[INFO] [11/04/2015 09:29:06.471] [wtf-akka.actor.default-dispatcher-2] [akka://wtf/user/$a] ['wtf2] external block post future
[INFO] [11/04/2015 09:29:06.472] [ForkJoinPool-2-worker-5] [akka://wtf/user/$a] ['wtf2] internal block pre sleep