【发布时间】:2011-03-10 14:06:16
【问题描述】:
有谁知道为什么我们需要在 java NIO 中使用自定义选择器提供程序。有没有人使用过自定义选择器提供程序,您为什么要这样做?
【问题讨论】:
-
我真的看不出任何意义。但是,有些人可能出于某种原因想要创建一个更优化的
Selector。老实说,我不知道。 -
@Gnarly 感谢您的意见
有谁知道为什么我们需要在 java NIO 中使用自定义选择器提供程序。有没有人使用过自定义选择器提供程序,您为什么要这样做?
【问题讨论】:
Selector。老实说,我不知道。
我写了一个来提供 SSLSocketChannels 和 SSLServerSocketChannels(和 SSLSelectors ...)。我也可以想象写一个来提供代理,因为 java.nio 根本不支持 java.net.Proxy 等。
【讨论】:
模拟实现。
针对使用 NIO 的代码编写单元测试非常有用。否则,模拟各种网络故障可能会很棘手。
【讨论】:
在撰写本文时,JDK 16(抢先体验)为 epoll 和 poll 提供了 SelectorProviders。 Linux 内核 5.1+ 提供了io_uring,据称它比epoll 更高效、更灵活。
能够通过系统属性或通过 ServiceLoader 使用自定义 SelectorProvider 使得即使在旧 JVM 上也可以使用 io_uring。
到目前为止,我还没有找到任何开源实现!
【讨论】: