의 오버 헤드가 내가이 코드에서 사용하고 얼마나 많은 스레드 코드 그래서때문에 중첩 선물
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을 사용하여 관찰했습니다. 이것은 내가 그래서
을 보았다 응용 프로그램이 ForkJoinPool-1-노동자 5 ForkJoinPool-2-노동자-3 2 개 스레드를 시작하는 것이다. 그러나 중첩을 제거하더라도 동일한 2 개의 스레드가 실행됩니다. 그래서 위와 같은 미래를 중첩하기 때문에 오버 헤드가 무엇인지 확신 할 수 없습니다.편집 :: 어떤 사람들은 ThreadPool (ForkJoin 등)의 유형에 달려 있다고 말합니다.
Akka.HTTP 또는 스프레이가 어떤 유형의 풀을 사용하는지 알 수 없습니까? Spray 웹 서비스에서 위 코드와 유사한 코드 스 니펫을 사용할 계획이었습니다. 아이디어는 Futures를 사용하여 웹 서비스의 성능을 측정하는 것이 었습니다.
은 하드웨어 아키텍처에 따라 다름 –