ScopedValues won’t do what is needed. 

On Oct 4, 2025, at 8:32 AM, Remi Forax <[email protected]> wrote:





From: "dreamlike_ocean lei" <[email protected]>
To: "loom-dev" <[email protected]>
Sent: Saturday, October 4, 2025 3:19:10 PM
Subject: Scheduler API Feedback

Hello @loom-dev <loom-dev at openjdk.org>,

I have been enjoying the new POLLER_PER_CARRIER design in the Loom repo and I really like the direction it is going.
While building on top of the latest code, I noticed a couple of issues and would like to ask for clarification.

  1. When calling Thread.startVirtualThread, the new virtual thread does not inherit the scheduler of the calling virtual thread, but instead uses DEFAULT_SCHEDULER. What is the reasoning behind this design? Could there be a mechanism to allow implicit inheritance? This would be very helpful for custom schedulers based on the per-core model.


I do not know if POLLER_PER_CARRIER works that way or not,
but the preferred mechanism to get "inheritance" of values between virtual threads is to use a ScopeValue for the value and a StructuredTaskScope to organize the virtual threads. 

  1. The method Thread.VirtualThreadScheduler::current is very helpful, but it seems not quite enough. Since Loom already provides the read-only builtin.externalView, could we also have a method like Thread.VirtualThreadScheduler::scheduler(Thread)? This would make it easier to build better schedulers. For example, I could combine Thread.currentThread with Thread.VirtualThreadScheduler.scheduler to decide whether to push a task into a local task queue rather than the eventLoop’s MPSC queue.

Thank you for your time and help.
Best regards,
dreamlike li


regards,
Rémi

Reply via email to