【发布时间】:2014-03-25 09:09:33
【问题描述】:
val iter = (1 to 1000).iterator.map { i =>
accountService.getAccountDataSyncList(i, 200)
}.takeWhile(_.nonEmpty).flatten.map(acc => produceReport(acc.bindAccount))
Future.sequence(iter.toList)
我迭代了 1 到 1000 页的帐户,最多创建 200 * 1000 个期货,
这会占用大量内存吗?
这是create all task as future then forget 模式性能友好吗?
【问题讨论】:
-
这取决于您的问题中未提及的许多事情。也许可以优化你的算法,这样你就不会创建数万或数十万个期货。这也取决于工作有多“重”。毕竟,为什么不尝试一下呢?
-
您似乎认为每个
Future都有一个线程。肯定不是这样的。Future实例的固定空间开销(实际上是一个特征,因此可以有多个实现)是适度的。在大多数系统上创建 200,000 个它们是没有问题的(当然任何桌面或服务器——移动或嵌入式是另一回事)。 -
@RandallSchulz 谢谢,我使用的是 512MB 堆 Java 虚拟机。所以我决定不使用我的 vm oom 重构这段代码。
标签: scala future reactive-programming