Akka Future - 并行与并发?

时间:2016-03-07 16:32:46

标签: scala akka future

来自写得好的Akka Concurrency

enter image description here

正如我理解,图表指出,numSummercharConcat都将在同一个线程上运行。

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

1 个答案:

答案 0 :(得分: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)
  }
}

和右边:

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)
      }
  }