性能问答>JDK的NIO底层实现中,osname选用疑惑>
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 阅读
请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步