On 13/10/2025 18:52, Mengyang Li wrote:
:

I came up with a new idea — what if we provide an additional Delay interface?

If the current scheduler implements this interface, we can use the scheduler’s own delay method.

Otherwise, we fall back to `DelayedTaskSchedulers.schedule`.

Currently, Loom only optimizes ForkJoinPool for this case.

``` java

VirtualThreadScheduler scheduler(boolean revealBuiltin) {
    if (scheduler instanceof BuiltinDefaultScheduler builtin && !revealBuiltin) {
        return builtin.externalView();
    } else {
        return scheduler;
    }
}

```

But if I use Netty’s EventLoop as the scheduler, being able to implement delay based on the event loop would be fantastic.


For now, the experimental/prototype for custom schedulers will only call out to the custom scheduler to execute a task that starts or continue a virtual thread. The VirtualThreadScheduler interface could be extended to allow the custom scheduler to take on delayed tasks but these are not virtual thread tasks, they are tasks to support timed-Object.wait for timed-park. You are right that a SPTE based implementation is used in the JDK when there is a custom scheduler configured. Is this causing an issue? Timeouts are usually cancelled, >99% in many cases, so I'd like to understand if your workloads are different, maybe you have more scenarios where a timeout occurs?

-Alan

Reply via email to