先物を組み合わせるには良いヒントがありますwith timeouts。 私はスカラの将来のシーケンスとタイムアウト処理
私の最初のアプローチは、この
import scala.concurrent._
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits._
object FutureSequenceScala extends App {
println("Creating futureList")
val timeout = 2 seconds
val futures = List(1000, 1500, 1200, 800, 2000) map { ms =>
val f = future {
Thread sleep ms
ms toString
}
Future firstCompletedOf Seq(f, fallback(timeout))
}
println("Creating waitinglist")
val waitingList = Future sequence futures
println("Created")
val results = Await result (waitingList, timeout * futures.size)
println(results)
def fallback(timeout: Duration) = future {
Thread sleep (timeout toMillis)
"-1"
}
}
のように見える今後のシーケンスsequenceOfFuturesでこれを行うにはどのように興味が先物の順序でタイムアウトを処理するためのより良い方法があるか、このaは有効なソリューションですか?
好奇心として、 'HasherWheelTimer'は' TimerTask'や 'newScheduledThreadPoolExecutor'よりどのように効率的ですか?どちらも同じ仕事をしています。 – Jatin
@Jatin、私はあなたがこの情報をもっと詳しく知ることができると思う:http://stackoverflow.com/questions/15347600/which-is-more-efficient-nettys-hashedwheeltimer-or-quartzs-scheduler。しかし、それが心から、より多くのタスクを追加することは、より多くのリソースを消費すべきではありません。 'Timer'や' TimerTask'のようなもので、より一定の時間(消費されるシステムリソースの観点から)に基づくタイマーになっています。短時間のタイムアウトに基づくタスクをたくさんスケジューリングする高スループットシステムでは、リソース使用量が一定のため、より良い解決策です。 – cmbaxter
しかし、 '' hashedWheelTimer'と比較して、 '' coresize'' 1''で 'STPE'はもっと多くのリソースを消費しますか?申し訳ありませんが、私はそれを手に入れません。 'STPE'は内部ヒープ' O(log(n)) 'によって挿入時間が長くなりますが、ティックタイムは小さくなります。 – Jatin