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