1

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

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

4

2 回答 2

4

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

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

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

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

于 2011-07-28T07:19:29.603 回答
-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 的简单方法。

于 2011-08-04T10:16:37.220 回答