我的理解是,在足够新的Linux版本上,默认选择器是使用epoll实现的类,而在较旧的版本上(较旧的内核?我不确定),使用了使用select或基于轮询的实现的类。
根据文档,还可以设置java.nio.channels.spi.SelectorProvider属性来覆盖默认的选择器类。
是否可以通过将属性设置为所提供(但非默认)类的名称来强制非epoll实现?标准java库中提供了哪些类来充当选择器?
最终的程序是否能跨平台工作并不重要。这仅仅是为了在受控环境中比较两种实现之间的性能。
发布于 2015-02-04 09:11:23
每个JRE只有一个Selector实现。你不能组合或替换它们,除非你自己编写,然后你就不能在默认提供者的SocketChannels中使用它,所以你也必须实现它们,以及ServerSocketChannels等等。
https://stackoverflow.com/questions/28311103
复制相似问题