<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    淺談Selector創建機制

    前段時間閱讀mina源碼時,理Selector實例化機制細節有點疑惑疑惑,主要是SelectorProvider的細節實現方面。

    通常創建一個Selector,通過靜態open方法創建一個實例。代碼如下:

    Selector selector = Selector.open();


    觀察JDK源碼發現Select的創建通過SelectorProvider輔助類來完成


    public static Selector open() throws IOException {
    return SelectorProvider.provider().openSelector();
    }



    進一步觀察SelectorProvider類provider方法源碼,引用到類sun.nio.ch.DefaultSelectorProvider,開始的時候由于在JDK API

    中沒找到該類,源碼里面也沒找到,比較疑惑如何創建的。今天在rt.jar找到了該類,并找到其對源碼。


    /**
    * Returns the default SelectorProvider.
    */
    public static SelectorProvider create() {
    PrivilegedAction pa = new GetPropertyAction("os.name");
    String osname = (String) AccessController.doPrivileged(pa);
    if ("SunOS".equals(osname)) {//1、如果SunOS
    return new sun.nio.ch.DevPollSelectorProvider();
    }
    //2、Linux 內核>=2.6
    // use EPollSelectorProvider for Linux kernels >= 2.6
    if ("Linux".equals(osname)) {
    pa = new GetPropertyAction("os.version");
    String osversion = (String) AccessController
    .doPrivileged(pa);
    String[] vers = osversion.split("\\.", 0);
    if (vers.length >= 2) {
    try {
    int major = Integer.parseInt(vers[0]);
    int minor = Integer.parseInt(vers[1]);
    if (major > 2 || (major == 2 && minor >= 6)) {
    return new sun.nio.ch.EPollSelectorProvider();
    }
    } catch (NumberFormatException x) {
    // format not recognized
    }
    }
    }
    return new sun.nio.ch.PollSelectorProvider();
    }



    create方法根據不同的操作系統構建不同的SelectorProvider,主要分為unix、linux,other,linux針對內核2.6以上

    通過epoll。獲取系統環境中的os.name、os.version觀察下不同平臺的細節。


    System.out.println(System.getProperty("os.name"));
    System.out.println(System.getProperty("os.version"));
    System.out.println(java.nio.channels.spi.SelectorProvider.provider());


     通過在不同的操作系統上執行如下代碼即可區分:

    win XP sp3:


     寫道
    Windows XP
    5.1
    sun.nio.ch.WindowsSelectorProvider@1fb8ee3


     ubuntu 11.04:


     寫道
    Linux
    2.6.38-8-generic
    sun.nio.ch.EPollSelectorProvider@160c21a


    JDK對linux內核2.6以上版本默認采用epoll,Linux下性能得到一定幅度提升。



    參考:

    DefaultSelectorProvider源碼:http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Platform/solaris/sun/nio/ch/DefaultSelectorProvider.java.htm

    posted on 2011-05-10 20:53 空白 閱讀(1300) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2011年5月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(15)

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲GV天堂GV无码男同| 国产小视频在线免费| 中文字幕免费在线看线人| 亚洲熟妇丰满多毛XXXX| 一区二区三区免费在线视频 | 国产亚洲精品VA片在线播放| 久久99国产综合精品免费| 亚洲bt加勒比一区二区| 免费无码中文字幕A级毛片| 毛片免费全部播放一级| 亚洲三级在线观看| 大陆一级毛片免费视频观看| 亚洲精品亚洲人成在线| 亚洲av麻豆aⅴ无码电影| 2022国内精品免费福利视频| 在线观看亚洲精品福利片| 国产一级a毛一级a看免费人娇| 最近的免费中文字幕视频| 久久久久亚洲国产AV麻豆| xxxx日本免费| 亚洲精品成a人在线观看☆| www亚洲精品少妇裸乳一区二区| 一级毛片一级毛片免费毛片| 国产网站免费观看| 久久国产一片免费观看| 亚洲成a人在线看天堂无码| 最近免费字幕中文大全| 亚洲精品国产第1页| 国产免费AV片在线观看| 亚洲最新中文字幕| 亚洲第一区在线观看| 国产啪精品视频网站免费尤物| 亚洲国产午夜中文字幕精品黄网站| 亚洲人成网站在线播放2019| 亚洲精品无码久久毛片| 久久国产色AV免费看| 亚洲AV成人无码久久WWW| 亚洲三区在线观看无套内射| 97热久久免费频精品99| 免费又黄又爽又猛大片午夜| 亚洲AV中文无码乱人伦|