1回复
4年前
JDK的NIO底层实现中,osname选用疑惑
为什么JDK的NIO底层实现中,osname是Linux的话就选用epoll,sunos则是poll?
public static SelectorProvider create() {
String osname = AccessController
.doPrivileged(new GetPropertyAction("os.name"));
if (osname.equals("SunOS"))
return createProvider("sun.nio.ch.DevPollSelectorProvider");
if (osname.equals("Linux"))
return createProvider("sun.nio.ch.EPollSelectorProvider");
return new sun.nio.ch.PollSelectorProvider();
}
可以看到,如果osname是Linux的话,实际上真正创建的是EPollSelectorProvider。
JDK之前的代码,确实是分了Linux 2.6之前和之后,但,不知道为啥,后面直接去掉了Linux版本判断,使用了这样的逻辑
3363 阅读