This is so awesome and wonderful to have you talk about that. I guess its all about the right timing. I was thinking exactly about this before my sleep last night.
- If I assign one thread(as PinnedDispatcher) and want it to run forever, do you still see any performance issues. I guess this model suits to my requirement until I tear apart the big giant application into smaller components, thoughts?
[DEBUG] [05/31/2015 14:56:13.794] [main] [EventStream(akka://race)] logger log1-Logging$DefaultLogger started
[DEBUG] [05/31/2015 14:56:13.800] [main] [EventStream(akka://race)] Default Loggers started
[DEBUG] [05/31/2015 14:56:13.814] [race-akka.actor.default-dispatcher-4] [akka://race/system] now supervising Actor[akka://race/system/deadLetterListener#1522932566]
[DEBUG] [05/31/2015 14:56:13.815] [race-akka.actor.default-dispatcher-2] [akka://race/system/deadLetterListener] started (akka.event.DeadLetterListener@3b04731d)
[DEBUG] [05/31/2015 14:56:13.826] [race-akka.actor.default-dispatcher-3] [akka://race/user] now supervising Actor[akka://race/user/coach#400280069]
[DEBUG] [05/31/2015 14:56:13.841] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] started (com.learner.ahka.ruforever.Runner@3efffee2)
[DEBUG] [05/31/2015 14:56:13.841] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach] started (com.learner.ahka.ruforever.Coach@3b7b2aa3)
[DEBUG] [05/31/2015 14:56:13.842] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach] now supervising Actor[akka://race/user/coach/runner#20433449]
[DEBUG] [05/31/2015 14:56:13.842] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach] received handled message StartWork
running long job
[DEBUG] [05/31/2015 14:56:13.844] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] received handled message Start
[ERROR] [05/31/2015 14:56:14.466] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach/runner] MarathonRunner is tired
java.lang.RuntimeException: MarathonRunner is tired
at com.learner.ahka.ruforever.Runner$$anonfun$receive$1.applyOrElse(Runner.scala:25)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at akka.event.LoggingReceive.apply(LoggingReceive.scala:62)
at akka.event.LoggingReceive.apply(LoggingReceive.scala:50)
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
at akka.event.LoggingReceive.applyOrElse(LoggingReceive.scala:50)
at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
at com.learner.ahka.ruforever.Runner.aroundReceive(Runner.scala:12)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
at akka.actor.ActorCell.invoke(ActorCell.scala:487)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)
at akka.dispatch.Mailbox.run(Mailbox.scala:221)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
[DEBUG] [05/31/2015 14:56:14.468] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] restarting
runner restarted, sending message to Run
[DEBUG] [05/31/2015 14:56:14.473] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] restarted
[DEBUG] [05/31/2015 14:56:14.473] [race-akka.actor.default-dispatcher-4] [akka://race/user/coach] received handled message RestartRunner
[DEBUG] [05/31/2015 14:56:14.474] [race-akka.actor.default-dispatcher-4] [akka://race/user/coach] received handled message StartWork
running long job
[DEBUG] [05/31/2015 14:56:14.475] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] received handled message Start
runner restarted, sending message to Run
[ERROR] [05/31/2015 14:56:15.081] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach/runner] MarathonRunner is tired
java.lang.RuntimeException: MarathonRunner is tired
at com.learner.ahka.ruforever.Runner$$anonfun$receive$1.applyOrElse(Runner.scala:25)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at akka.event.LoggingReceive.apply(LoggingReceive.scala:62)
at akka.event.LoggingReceive.apply(LoggingReceive.scala:50)
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
at akka.event.LoggingReceive.applyOrElse(LoggingReceive.scala:50)
at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
at com.learner.ahka.ruforever.Runner.aroundReceive(Runner.scala:12)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
at akka.actor.ActorCell.invoke(ActorCell.scala:487)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)
at akka.dispatch.Mailbox.run(Mailbox.scala:221)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
running long job
[DEBUG] [05/31/2015 14:56:15.082] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] restarting
[DEBUG] [05/31/2015 14:56:15.082] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] restarted
[DEBUG] [05/31/2015 14:56:15.082] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach] received handled message RestartRunner
[DEBUG] [05/31/2015 14:56:15.082] [race-akka.actor.default-dispatcher-2] [akka://race/user/coach] received handled message StartWork
[DEBUG] [05/31/2015 14:56:15.082] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] received handled message Start
[ERROR] [05/31/2015 14:56:15.691] [race-akka.actor.default-dispatcher-4] [akka://race/user/coach/runner] MarathonRunner is tired
java.lang.RuntimeException: MarathonRunner is tired
at com.learner.ahka.ruforever.Runner$$anonfun$receive$1.applyOrElse(Runner.scala:25)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at akka.event.LoggingReceive.apply(LoggingReceive.scala:62)
at akka.event.LoggingReceive.apply(LoggingReceive.scala:50)
at scala.PartialFunction$class.applyOrElse(PartialFunction.scala:123)
at akka.event.LoggingReceive.applyOrElse(LoggingReceive.scala:50)
at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
at com.learner.ahka.ruforever.Runner.aroundReceive(Runner.scala:12)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
at akka.actor.ActorCell.invoke(ActorCell.scala:487)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)
at akka.dispatch.Mailbox.run(Mailbox.scala:221)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
[DEBUG] [05/31/2015 14:56:15.699] [race-my-pinned-dispatcher-5] [akka://race/user/coach/runner] stopped