Akka Future - 并行与并发?

Kev*_*ith 5 scala future akka

来自精心编写的Akka Concurrency:

在此输入图像描述

正如我的理解,图中所指出的,无论是numSummercharConcat将在同一线程上运行.

是否可以Future并行运行,即在不同的线程上运行?

Rob*_*ing 11

左边的图片他们并行运行的.

说明的一点是,该Future.apply方法是启动执行的方法,因此如果在第一个未来的结果被flatMap编辑之前没有发生(如右图所示),那么你就不会得到并行执行.

(请注意,"开锣",我指的是有关ExecutionContext被告知有关的工作.如何并行化是一个不同的问题,并可能取决于之类的东西它的线程池的大小.)

左边的等价代码:

val numSummer = Future { ... }  // execution kicked off
val charConcat = Future { ... }  // execution kicked off
numSummer.flatMap { numsum =>
  charConcat.map { string =>
    (numsum, string)
  }
}
Run Code Online (Sandbox Code Playgroud)

并为正确的:

Future { ... }  // execution kicked off
  .flatMap { numsum =>
    Future { ... }  // execution kicked off (Note that this does not happen until
                    // the first future's result (`numsum`) is available.)
      .map { string =>
        (numsum, string)
      }
  }
Run Code Online (Sandbox Code Playgroud)