并行还是并行?
从精心编写的Akka并发:
据我了解,该图指出, numSummer
和charConcat
都将在同一个线程上运行。
是否可以并行运行每个Future
,即在单独的线程上运行?
左边的图片是它们并行运行。
说明的一点是, Future.apply
方法是启动执行的方式,所以如果直到第一个将来的结果是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)
}
}
链接地址: http://www.djcxy.com/p/79391.html