- Параллельный внешний поток и последовательный внутренний поток
- Параллельные внешние и внутренние потоки (с использованием ParallelStream) — это эффективно проверяет `ForkJoinPool.commonPool()
- Параллельные внешние и внутренние потоки, но внутренние потоки создают новый ForkJoinPool для каждой задачи
Код: Выделить всё
public class NestedPerf {
@State(Scope.Benchmark)
public static class StateData{
public static final List outerLoop = IntStream.range(0, 32).boxed().toList();
public static final List innerLoop = IntStream.range(0, 32).boxed().toList();
}
private static void runInNewPool(Runnable task) {
ForkJoinPool pool = new ForkJoinPool();
try {
pool.submit(task).join();
} finally {
pool.shutdown();
}
}
private static void innerParallelLoop() {
StateData.innerLoop.parallelStream().unordered().forEach(i -> {
try {
Thread.sleep(5);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
private static void innerSequentialLoop() {
StateData.innerLoop.stream().unordered().forEach(i -> {
try {
Thread.sleep(5);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
@Benchmark
public void testingNewPool(Blackhole bh){
StateData.outerLoop.parallelStream().unordered().forEach(i -> {
runInNewPool(ParallelPerf::innerParallelLoop);
bh.consume(i);
});
}
@Benchmark
public void testingCommonPoolWithSequentialInner(Blackhole bh){
StateData.outerLoop.parallelStream().unordered().forEach(i -> {
innerSequentialLoop();
bh.consume(i);
});
}
@Benchmark
public void testingCommonPool(Blackhole bh){
StateData.outerLoop.parallelStream().unordered().forEach(i -> {
innerParallelLoop();
bh.consume(i);
});
}
}
Код: Выделить всё
Benchmark Mode Cnt Score Error Units
NestedPerf.testingCommonPool thrpt 25 1.935 ± 0.005 ops/s
NestedPerf.testingCommonPoolWithSequentialInner thrpt 25 1.744 ± 0.007 ops/s
NestedPerf.testingNewPool thrpt 25 22.648 ± 0.559 ops/s
Если это поможет, я запускаю это на системе Core i7 10850H с 12 доступными процессорами (шестнадцатеричный процессор + гиперпоточность).
Подробнее здесь: https://stackoverflow.com/questions/792 ... monpool-fo