簡體   English   中英

等待期貨列表 VS 等待單個期貨

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM