Ich habe das basic
Beispiel aus dem Beispiel-Repository von ScalaMeter (https://github.com/scalameter/scalameter-examples) verwendet. Der Code des Beispiels ist wie folgt:Testen der Leistung von parallelen Aktionen mit ScalaMeter
measure method "map" in {
using(ranges) in { r =>
r.map(_ + 1)
}
}
In meinem Fall möchte ich die Beschleunigung testen einige Aktionen parallel laufen. Ein einfaches Beispiel könnte sein, dass ich einen Bereich dividiere, der gemappt werden muss. Ich habe ExecutorService
von Java8
verwendet, um die Aufgaben parallel auszuführen. Es sieht wie folgt aus:
val cores = Runtime.getRuntime.availableProcessors()
val pool = Executors.newFixedThreadPool(cores)
measure method "parallel map" in {
using(ranges) in { r =>
val tasks = (0 until cores).map { t =>
new Callable[Unit] {
override def call() = (0 + t until r.last by cores).map(_ + 1)
}
}
import collection.JavaConverters._
pool.invokeAll(tasks.asJava)
}
}
Das Problem ist, dass, obwohl die parallelen Test beendet (Sie die Zeit, um Ergebnisse sehen) nicht den Exit-Code zurückgibt. Die Implikation ist, dass, wenn ich die Bench.LocalTime
zu Bench.ForkedTime
ändere sogar die Ergebnisse weg sind. Ich bin ziemlich verwirrt, was vor sich geht. Irgendwelche Ideen?