On 27/02/2026 06:04, Mengyang Li wrote:

Hi Alan,

Thanks for the quick reply. I’ll continue investigating the custom scheduler and sun.nio.ch.Poller related code.

I also checked the Loom repo’s io_uring branch and noticed a difference when io_uring poller is enabled:

 *

    SocketChannelImplstill does park(Net.POLLIN)then IOUtil.read(...)

 *

    NioSocketImpl (for virtual threads) does:

``` java
if (Poller.supportReadOps() && Thread.currentThread().isVirtual()) {
    n = Poller.read(fdVal(fd), b, off, len, remainingNanos, this::isOpen);
    if (n != IOStatus.UNAVAILABLE) return n;
}
```

Why isn’t SocketChannelImpl using a similar Poller.read(...) VT path? Is this intentional, or just not wired up yet in that branch?

This is a lot of work required on memory management before the read/write ops can efficiently make use of this. This is why the comment in the NioSocketImpl code says "experimental".

-Alan

Reply via email to