的開銷,我寫了多少個線程我在這段代碼使用此代碼有沒有因爲嵌套期貨
package com.abhi
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
object FutureNesting extends App {
def measure(future: => Future[Unit]) : Future[Long] = {
val start = System.currentTimeMillis()
val ec = implicitly[ExecutionContext]
val t = future
t map { case _ =>
val end = System.currentTimeMillis()
end - start
}
}
measure(Future{ Thread.sleep(10000) }) onSuccess {case a => println(a)}
scala.io.StdIn.readLine()
}
左右。更廣泛的問題是,在未來嵌套期貨的影響是什麼。
因此,我運行上面的應用程序,並使用Visual VM觀察它。這是我所看到的
因此應用程序啓動2個線程ForkJoinPool-1-工人-5和ForkJoinPool -2-工人3。但是,即使刪除嵌套,它也會啓動相同的2個線程。所以我不確定什麼是因爲嵌套像上面的期貨的開銷。
編輯::有人說它取決於ThreadPool的類型(ForkJoin等)。
我不知道Akka.HTTP或Spray使用哪種類型的池?我計劃在Spray Web服務中使用與上面類似的代碼片段。這個想法是使用Futures來衡量Web服務的性能。
取決於你的硬件架構 –