首页 > 解决方案 > Mailbox 是 ForkJoinTask 但 ExecutorService 可以是 ThreadPoolExecutor:这样可以吗?

问题描述

在 Akka 2.6.10 中,邮箱是 aForkJoinTaskRunnable.

private[akka] abstract class Mailbox(val messageQueue: MessageQueue)
    extends ForkJoinTask[Unit]
    with SystemMessageQueue
    with Runnable {

  // Runnable method
  override final def run(): Unit = {
    // ...
    processMailbox()
    dispatcher.registerForExecution(this, false, false)
    // ...
  }

  // ForkJoinTask method
  final override def exec(): Boolean = {
    // ...
    run()
    // ...
  }
}

但是执行器服务可以配置为使用TheadPoolExecutor(TP)而不是ForkJoinPool(FJ)。因此,TP 可能会执行ForkJoinTask.

这可能完全合理,但 TP 执行 FJ 任务的事实对我来说有点奇怪。任何人都可以在这里分享决策推理吗?ForkJoinTask即使 Akka 可以执行,它对 Akka 有什么好处TheadPoolExecutor

标签: concurrencyakka

解决方案


推荐阅读