Akka控制线程池线程

时间:2011-07-28 06:59:33

标签: scala actor akka

可能是一个非常愚蠢的问题 -

是否可以自定义Akka / Scala actor,以便控制actor使用的线程?例如你可以初始化你自己的线程池中使用的线程集,或者以其他方式控制/修改线程吗?

2 个答案:

答案 0 :(得分:4)

在Akka中,线程池通过MessageDispatcher实例进行管理。您可以轻松地设置您想要演员的调度员:

class MyActor( dispatcher: MessageDispatcher ) extends Actor {
  self.dispatcher = dispatcher
  ...
}

要提供您自己的调度程序,您可以扩展akka.dispatch.MessageDispatcher(有关示例,请参阅现有调度程序实现)。在这里你可以直接玩线程。

当然,将业务逻辑放在调度程序中是危险的,因为它可能会破坏actor模型并增加并发错误的数量......

答案 1 :(得分:-1)

我自己试图理解它,但接触Akka的人不希望线程管理暴露给公众。

ThreadPoolConfig - 负责创建 ExecutorService 实例的类是一个案例类,其方法createExecutorService()声明为 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)
    }
  }

所以,我没有看到提供自己的ExecutorService的简单方法。