最佳答案
左边的图片是它们并行运行。
插图的要点是 Future.apply
方法是启动执行的方法,因此如果直到第一个 future 的结果为 flatMap
时才发生ed(如右图所示),那么你就得不到并行执行。
(请注意,“启动”是指相关的 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)
}
}
关于scala - Akka future - 并行与并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849001/