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

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

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

    java 1.4提供了nio,也就是之前我的一片博客中所說的multiplexed non-blocking I/O。這種模型比阻塞模型的并發性能要好一些,Java很多的網絡應用都因此重寫了底層模塊,包括Tomcat、Jetty等等,也出現了基于nio的框架mina、國產的cindy等等。

    java nio帶來的影響是巨大的,得到了很多擁護和贊賞。

    不過有一些是謠言,例如windows下的實現是Windows中并發性能最好的I/O模型IOCP,但事實上是這樣么?

    JDK 6.0 RC版提供了源碼下載,下載路徑:http://www.java.net/download/jdk6/jdk-6-rc-src-b104-jrl-01_nov_2006.jar

    我們看最終Windows的實現:
    j2se\src\windows\native\sun\nio\ch\WindowsSelectorImpl.c


    82行開始:
    ????/*?Call?select?*/
    ????
    if?((result?=?select(0?,?&readfds,?&writefds,?&exceptfds,?tv))?
    ?????????????????????????????????????????????????????????????
    ==?SOCKET_ERROR)?{
    ????????
    /*?Bad?error?-?this?should?not?happen?frequently?*/
    ????????
    /*?Iterate?over?sockets?and?call?select()?on?each?separately?*/
    ????????FD_SET?errreadfds,?errwritefds,?errexceptfds;
    ????????readfds.fd_count?
    =?0;
    ????????writefds.fd_count?
    =?0;
    ????????exceptfds.fd_count?
    =?0;
    ????????
    for?(i?=?0;?i?<?numfds;?i++)?{
    ????????????
    /*?prepare?select?structures?for?the?i-th?socket?*/
    ????????????errreadfds.fd_count?
    =?0;
    ????????????errwritefds.fd_count?
    =?0;
    ????????????
    if?(fds[i].events?&?POLLIN)?{
    ???????????????errreadfds.fd_array[
    0]?=?fds[i].fd;
    ???????????????errreadfds.fd_count?
    =?1;
    ????????????}

    ????????????
    if?(fds[i].events?&?(POLLOUT?|?POLLCONN))?{
    ????????????????errwritefds.fd_array[
    0]?=?fds[i].fd;
    ????????????????errwritefds.fd_count?
    =?1;
    ????????????}

    ????????????errexceptfds.fd_array[
    0]?=?fds[i].fd;
    ????????????errexceptfds.fd_count?
    =?1;

    ????????????
    /*?call?select?on?the?i-th?socket?*/
    ????????????
    if?(select(0,?&errreadfds,?&errwritefds,?&errexceptfds,?&zerotime)?
    ?????????????????????????????????????????????????????????????
    ==?SOCKET_ERROR)?{
    ????????????????
    /*?This?socket?causes?an?error.?Add?it?to?exceptfds?set?*/
    ????????????????exceptfds.fd_array[exceptfds.fd_count]?
    =?fds[i].fd;
    ????????????????exceptfds.fd_count
    ++;
    ????????????}
    ?else?{
    ????????????????
    /*?This?socket?does?not?cause?an?error.?Process?result?*/
    ????????????????
    if?(errreadfds.fd_count?==?1)?{
    ????????????????????readfds.fd_array[readfds.fd_count]?
    =?fds[i].fd;
    ????????????????????readfds.fd_count
    ++;
    ????????????????}

    ????????????????
    if?(errwritefds.fd_count?==?1)?{
    ????????????????????writefds.fd_array[writefds.fd_count]?
    =?fds[i].fd;
    ????????????????????writefds.fd_count
    ++;
    ????????????????}

    ????????????????
    if?(errexceptfds.fd_count?==?1)?{
    ????????????????????exceptfds.fd_array[exceptfds.fd_count]?
    =?fds[i].fd;
    ????????????????????exceptfds.fd_count
    ++;
    ????????????????}

    ????????????}

    ????????}

    ????}
    ????????????

    這就是廣泛應用在Winsock中使用的select模型,也眾所周知,并發性能不是很好。而且FD_SETSIZE不能超過Windows下層提供者的限制,這個限制通常是1024。也就是說Windows下,JDK的nio模型,不能超過1024個連接,這個跟我之前做的測試結果相似。

    而且,如果FD_SETSIZE很大的話,例如是1000,調用select之前,必須設置1000個socket,返回之后又必須檢查這1000個socket。

    也就說,Windows下使用SUN JDK java的nio,并不能提高很好的并發性能。
    posted on 2006-11-22 00:35 溫少的日志 閱讀(7942) 評論(1)  編輯  收藏
    Comments
    • # re: 關于java nio在windows下實現[未登錄]
      Steven
      Posted @ 2007-11-09 21:14
      那如果平臺換成Linux的話,連接數的限制是多少呢?

      謝謝  回復  更多評論   

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


    網站導航:
     
     
    主站蜘蛛池模板: 久久亚洲AV成人无码电影| 亚洲国产综合久久天堂| 亚洲一区综合在线播放| 日本免费久久久久久久网站| 亚洲人成网站在线播放vr| 成年女人A毛片免费视频| 最新精品亚洲成a人在线观看| 国产精品小视频免费无限app| 亚洲国产成人久久综合一区77| 污网站免费在线观看| 亚洲精品456播放| 国产免费人成视频在线播放播| 久久亚洲av无码精品浪潮| 日韩精品无码免费专区午夜| 久久精品亚洲视频| 亚洲一区免费视频| 欧洲 亚洲 国产图片综合| 国产免费AV片无码永久免费| 特a级免费高清黄色片 | 四虎永久免费地址在线网站| 黄色网页免费观看| 中文字幕亚洲日韩无线码| 中文字幕免费视频| 亚洲大尺度无码无码专线一区| 亚洲精品一级无码中文字幕| 一区二区三区在线免费看| 亚洲AV一二三区成人影片| 免费一级毛片一级毛片aa| WWW免费视频在线观看播放| 亚洲精品福利网泷泽萝拉| 久久久久久99av无码免费网站| 99亚洲精品卡2卡三卡4卡2卡| 中文字幕精品亚洲无线码一区应用| 黄网站色视频免费在线观看的a站最新| 亚洲欧洲精品视频在线观看| 又粗又黄又猛又爽大片免费| 无码A级毛片免费视频内谢| 亚洲中文无码永久免| 亚洲日韩中文字幕在线播放| 亚洲第一成年免费网站| 久久成人永久免费播放|