Почему параллельные потоки не работают с виртуальными потоками так же быстро, как общий пул потоков?
Я экспериментирую с виртуальными потоками в своем проекте ткацкой лаборатории и хотел посмотреть, быстрее ли виртуальные потоки, чем потоки платформы, при выполнении параллельного потока, но на самом деле это кажется медленнее.
try (var executorService = Executors.newThreadPerTaskExecutor(virtualThreadFactory)) {
var candidates3 = LongStream.iterate(3, x -> x < count, x -> x + 2);
time4 = System.currentTimeMillis();
var primes3 = executorService.submit(() ->
candidates3.parallel()
.filter(candidate -> isPrime(candidate)).toArray()
).get();
time5 = System.currentTimeMillis();
}
где в конечном итоге я получаю вывод (в миллисекундах)
sequential time = 7546
parallel time = 1289
virtual time = 1388
и в целом использование Virtual Threads медленнее, чем обычный ForkJoinPool. Я делаю какую-то основную ошибку или недопонимание, или Project Loom еще не интегрирован с Java Streams?