我正在我的loom-lab项目中试验虚拟线程,并想看看在执行并行流时虚拟线程是否比平台线程快,但实际上它似乎更慢。
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
并且通常使用虚拟线程比常见的 ForkJoinPool 慢。我是否在某处犯了一些基本错误或误解,或者 Project Loom 尚未与 Java Streams 集成?