Почему параллельные потоки не работают с виртуальными потоками так же быстро, как общий пул потоков?

Я экспериментирую с виртуальными потоками в своем проекте ткацкой лаборатории и хотел посмотреть, быстрее ли виртуальные потоки, чем потоки платформы, при выполнении параллельного потока, но на самом деле это кажется медленнее.

      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?

0 ответов

Другие вопросы по тегам