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

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品无码AV中文字幕电影网站| 黑人粗长大战亚洲女2021国产精品成人免费视频| 免费无码一区二区三区蜜桃大| 亚洲乱码一二三四区乱码| 免费大片黄在线观看yw| 亚洲欧洲另类春色校园网站| 九九九精品成人免费视频| 四虎国产精品免费永久在线| 免费人成激情视频| 国产福利免费视频| 国产国拍精品亚洲AV片| 亚洲欧洲日韩国产一区二区三区| 无码日韩人妻AV一区免费l| 亚洲av综合av一区| 亚洲老熟女五十路老熟女bbw| A在线观看免费网站大全| 亚洲欧洲另类春色校园网站| 白白国产永久免费视频| 亚洲av无码专区在线观看亚| 97视频免费在线| 久久久久亚洲AV成人无码网站| 边摸边脱吃奶边高潮视频免费| 免费jlzzjlzz在线播放视频| www免费黄色网| 亚洲欧洲综合在线| 午夜两性色视频免费网站| 曰批全过程免费视频免费看| 亚洲乱码无码永久不卡在线| 最近2019中文字幕免费直播| 国产成人人综合亚洲欧美丁香花| 四虎免费影院ww4164h| 亚洲色精品三区二区一区| 亚洲成人影院在线观看| 精品国产一区二区三区免费| 亚洲一本之道高清乱码| 亚洲av午夜精品一区二区三区| 暖暖免费在线中文日本| 亚洲女子高潮不断爆白浆| 国产成人亚洲精品91专区手机| 中文字幕免费视频| 免费一级毛片在线播放视频免费观看永久|