<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)

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲视频在线观看2018| 久久亚洲国产精品成人AV秋霞| 亚洲小说图区综合在线| 91成人免费在线视频| 亚洲欧洲日本天天堂在线观看| 84pao国产成视频免费播放| 国产天堂亚洲精品| 夜色阁亚洲一区二区三区| 亚洲国产日韩一区高清在线 | 亚洲av无码成人精品国产| 成年人免费视频观看| 日韩欧美亚洲中文乱码| 亚洲国产成人影院播放| 久久久久久噜噜精品免费直播| 亚洲精品白浆高清久久久久久| 永久免费A∨片在线观看| 中文字幕亚洲综合久久2| 成年男女男精品免费视频网站 | 免费无码又爽又刺激聊天APP| 亚洲Av无码一区二区二三区| 午夜免费福利影院| 一区二区三区免费视频观看| 国产亚洲一区二区三区在线| 免费不卡在线观看AV| 亚洲一级特黄特黄的大片| mm1313亚洲国产精品美女| a国产成人免费视频| 亚洲国产人成在线观看| 国产美女无遮挡免费视频网站 | 91禁漫免费进入| 亚洲人成色77777在线观看| 亚洲午夜激情视频| 91高清免费国产自产拍2021| 亚洲欧美黑人猛交群| 亚洲热妇无码AV在线播放| 香蕉97超级碰碰碰免费公| 一级做α爱过程免费视频| 久久亚洲AV无码精品色午夜| 精品免费久久久久久成人影院| 三年在线观看免费观看完整版中文| 亚洲精品日韩中文字幕久久久|