[英]Waiting on a list of futures VS Waiting on individual futures
我試圖了解以下兩種方法的優缺點(如果有的話)
def doSomething(): Future[Unit] = ???
// Create one big list of futures and wait on this future
private val oneBigFuture: Future[immutable.IndexedSeq[Unit]] = Future.sequence {
(1 to 1000).map(_ => doSomething)
}
Await.result(oneBigFuture, 10.seconds)
// Wait on the individual futures created by the doSomething() method
(1 to 1000).foreach {
_ =>
val individualFuture = doSomething()
Await.result(individualFuture, 10.seconds)
}
創建一個大的 future 列表並將其提交給result
方法而不是將doSomething()
方法生成的單個Future
提交給result
方法有什么好處?
顯然,第一種方法創建了一個批處理操作,但我不確定編譯器是否也將第二種方法轉換為批處理操作 - 因為它包裹在foreach
語句中。
第一種方法應該更快,因為所有Future
都在阻塞發生之前啟動,而在第二種方法中,阻塞發生在每個下一個Future
開始之前。 你可以這樣測試
def doSomething(): Future[Unit] = Future { Thread.sleep(1000); println(1) }
在哪里
Await.result(Future.sequence((1 to 10).map(_ => doSomething())), Duration.Inf)
大約需要一秒鍾,而
(1 to 10).foreach(_ => Await.result(doSomething(), Duration.Inf))
大約需要 10 秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.