簡體   English   中英

在Scala的期貨中使用期貨的方法

[英]Way to use Futures inside Futures in Scala

我需要同時執行數千個任務。 所以我正在考慮為此目的使用期貨。 但是這數千個任務中的每一個都已經在未來。 在未來中使用未來會很好。 或者我在這里做錯了。 每個任務大約需要1毫秒的時間來計算。 因此,我認為最好不要在期貨交易中按順序進行。 因此,從理論上講,完成整個任務大約需要1毫秒左右。 但是完整的執行需要150毫秒。 這是否意味着所有並行任務所承擔的工作要比單獨承擔的任務多。

val start = System.nanoTime()

您可以在期貨上使用flatMap()函數進行組合,我想這就是您所說的“期貨內的期貨”,這是使用期貨的一種很好的慣用方式。

地圖表示“用這個未來的結果,觸發這個”。 例如,您可以執行類似getASpecificEndpointInDb().flatMap(endpointURL => doAGetRequest(endpointURL)) ,其中getASpecificEndpointInDb()返回Future [String],而doAGetRequest()返回Future [JsObject]

要回答問題的第二部分:即使您有1000個並行任務,您的計算機在任何給定時間都只能物理處理少量任務。 假設您使用的是8,具體取決於您的計算機,則理論上可以達到的最佳效果是1000/8 = 125 ms。 但是由於存在一些上下文切換成本,因此150ms是完全合理的。 如果順序執行,仍然比1000ms好得多:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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