来自精心编写的Akka Concurrency:
正如我的理解,图中所指出的,无论是numSummer与charConcat将在同一线程上运行.
是否可以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)