Good afternoon, everyone! I think I've found a bug. There is a code that basically pings the server. I decided to test it on virtual threads and for some reason they don't work in it. Code: ``` public static void main(String[] args) throws ExecutionException, InterruptedException { System.out.println("Test fixed thread poll"); long start = System.currentTimeMillis(); var counter = ping(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())); System.out.println("Execute time " + (System.currentTimeMillis() - start) + " " + counter);
System.out.println("half-time break"); LockSupport.parkNanos(10000000000L); System.out.println("Test virtual thread poll"); start = System.currentTimeMillis(); counter = ping(Executors.newVirtualThreadPerTaskExecutor()); System.out.println("Execute time " + (System.currentTimeMillis() - start) + " " + counter); } private static int ping(ExecutorService executor) throws ExecutionException, InterruptedException { AtomicInteger counter = new AtomicInteger(); var futures = Stream.<CompletableFuture<Void>> builder(); for (int i = 0; i < 1000; i++) { var fut = CompletableFuture.runAsync(() -> { try { InetAddress address = InetAddress.getByName("8.8.8.8"); boolean reachable = address.isReachable(100); counter.incrementAndGet(); } catch (Throwable e) { e.printStackTrace(); } }, executor); futures.add(fut); } CompletableFuture.allOf(futures.build().toArray(CompletableFuture[]::new)).get(); return counter.get(); } ``` I get the following results. (-Djdk.tracePinnedThreads=full is enabled and it outputs nothing to the console) Test fixed thread poll: Execute time 6317 1000 Test virtual thread poll: Execute time 6319 1000 I expected to get results like this. (You can get such results if you replace the request to the network with Thread.sleep(100)) Test fixed thread poll: Execute time 6308 1000 Test virtual thread poll: Execute time 110 1000 openjdk 22.0.2 2024-07-16 OpenJDK Runtime Environment GraalVM CE 22.0.2+9.1 (build 22.0.2+9-jvmci-b01) OpenJDK 64-Bit Server VM GraalVM CE 22.0.2+9.1 (build 22.0.2+9-jvmci-b01, mixed mode, sharing)