<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 空白 閱讀(1290) 評論(0)  編輯  收藏


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


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

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(15)

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久激情亚洲精品无码?V| 女人18毛片水真多免费看| 久久久久久亚洲精品不卡| 国产精品亚洲AV三区| 女人18毛片水真多免费播放| 亚洲熟女综合一区二区三区| 四虎永久在线精品免费网址| 亚洲精品中文字幕| 亚洲中文字幕一区精品自拍| 最近2019中文字幕免费看最新| 亚洲性无码AV中文字幕| 免费看的一级毛片| 美女视频黄视大全视频免费的| 全部免费毛片在线| 一级毛片免费不卡| 精品亚洲一区二区| 亚洲网站免费观看| 亚洲人成电影网站免费| 国产在线98福利播放视频免费| 搜日本一区二区三区免费高清视频 | 亚洲AV成人一区二区三区在线看| 无码专区永久免费AV网站| 亚洲色大情网站www| 免费国产高清视频| 久久久受www免费人成| 亚洲电影中文字幕| 国产香蕉九九久久精品免费| 国产精品亚洲五月天高清| 免费福利视频导航| 亚洲国产av玩弄放荡人妇| 亚洲精品专区在线观看| 99热在线观看免费| 亚洲乱码国产乱码精华| 国产亚洲精品无码拍拍拍色欲| 性无码免费一区二区三区在线| 亚洲国产日韩精品| 国产亚洲成人久久| 18国产精品白浆在线观看免费| 国产亚洲美女精品久久| 久久久久无码精品亚洲日韩| 免费观看黄网站在线播放|