Potentially a very silly question--
Is it possible to customize Akka/Scala actors such that you control the threads that are used by the actors? e.g. can you initial
In Akka, the thread pool is managed via a MessageDispatcher instance. You can set the dispatcher you want to actors easily:
class MyActor( dispatcher: MessageDispatcher ) extends Actor {
self.dispatcher = dispatcher
...
}
To provide your own dispatcher, you can extend akka.dispatch.MessageDispatcher
(see existing dispatchers implementation for examples). Here you can play directly with the threads.
Of course, it's dangerous to put business logic inside a dispatcher because it may break the actor model and increase the number of concurrency bugs...
I tried to understand it myself, but seams that guys in Akka don't want thread management to be exposed to public.
ThreadPoolConfig - the class that is responsible for creation of ExecutorService instances is a case class with method createExecutorService() declared final!
final def createExecutorService(threadFactory: ThreadFactory): ExecutorService = {
flowHandler match {
case Left(rejectHandler) ⇒
val service = new ThreadPoolExecutor(...)
service
case Right(bounds) ⇒
val service = new ThreadPoolExecutor(...)
new BoundedExecutorDecorator(service, bounds)
}
}
So, I don't see an easy ways to provide your own ExecutorService.