像未来一样——并行还是并发?
Akka Future - Parallel versus Concurrent?
来自写得很好的Akka Concurrency:
根据我的理解,图表指出,numSummer
和 charConcat
都将 运行 在同一个线程上。
是否可以 运行 每个 Future
并行,即在单独的线程上?
左图是他们运行并列的
插图的要点是 Future.apply
方法是开始执行的方法,所以如果直到第一个 future 的结果被 flatMap
ed 才发生(如图所示)在右边),那么你就不会得到并行执行。
(请注意 "kicked off",我的意思是相关的 ExecutionContext
被告知有关该工作的信息。it 如何并行化是一个不同的问题,可能取决于关于它的线程池的大小。)
左边的等效代码:
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)
}
}
来自写得很好的Akka Concurrency:
根据我的理解,图表指出,numSummer
和 charConcat
都将 运行 在同一个线程上。
是否可以 运行 每个 Future
并行,即在单独的线程上?
左图是他们运行并列的
插图的要点是 Future.apply
方法是开始执行的方法,所以如果直到第一个 future 的结果被 flatMap
ed 才发生(如图所示)在右边),那么你就不会得到并行执行。
(请注意 "kicked off",我的意思是相关的 ExecutionContext
被告知有关该工作的信息。it 如何并行化是一个不同的问题,可能取决于关于它的线程池的大小。)
左边的等效代码:
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)
}
}