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

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

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

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    再談Selector的wakeup方法

    Posted on 2009-02-01 11:15 dennis 閱讀(3377) 評論(0)  編輯  收藏 所屬分類: javalinux & C
        過去推薦過兩篇blog《Java NIO類庫Selector機制解析》(),感嘆java為了跨平臺似乎“很傻很天真”。最近學(xué)習(xí)使用ACE,才知道這個解決辦法倒不是java開創(chuàng)的,ACE也是這樣搞的。java nio中Selector的wakeup方法,類似于ACE_Select_Reactor的notify機制,可以從非select調(diào)用的線程去喚醒阻塞在select調(diào)用上的select線程,當然ACE_Select_Reactor的notify強大多了,可以實現(xiàn)event handler的無限擴容。ACE_Select_Reactor的notify的實現(xiàn)是通過ACE_Pipe,在ACE_Pipe中可以清晰地看到針對win32平臺是采用了TCP連接:

    #if defined (ACE_LACKS_SOCKETPAIR) || defined (__Lynx__)
      ACE_INET_Addr my_addr;
      ACE_SOCK_Acceptor acceptor;
      ACE_SOCK_Connector connector;
      ACE_SOCK_Stream reader;
      ACE_SOCK_Stream writer;
      
    int result = 0;
    if defined (ACE_WIN32)
      ACE_INET_Addr local_any  (static_cast
    <u_short> (0), ACE_LOCALHOST);
    else
      ACE_Addr local_any 
    = ACE_Addr::sap_any;
    # endif 
    /* ACE_WIN32 */

      
    // Bind listener to any port and then find out what the port was.
      if (acceptor.open (local_any) == -1
          
    || acceptor.get_local_addr (my_addr) == -1)
        result 
    = -1;
      
    else
        {
          ACE_INET_Addr sv_addr (my_addr.get_port_number (),
                                 ACE_LOCALHOST);

          
    // Establish a connection within the same process.
          if (connector.connect (writer, sv_addr) == -1)
            result 
    = -1;
          
    else if (acceptor.accept (reader) == -1)
            {
              writer.close ();
              result 
    = -1;
            }
        }

      
    // Close down the acceptor endpoint since we don't need it anymore.
      acceptor.close ();

        在類unix平臺是采用STREAMS管道,在一些遺留的unix平臺上是socketpair()。為什么在win32上采用TCP連接的方式呢?原因不是什么性能、資源問題,也不是因為windows管道消耗的資源比tcp多,而是由于winsock的select函數(shù)(java nio的select在win32下是使用select實現(xiàn)的)是無法監(jiān)測管道事件的,也就是說無法將windows管道加入到fd_set中,為了做到可移植,才在win32上采用了TCP連接的方式來實現(xiàn)。這一點在blog上篇的新回復(fù)中已經(jīng)有人提到。
    主站蜘蛛池模板: 蜜臀AV免费一区二区三区| 成人免费毛片视频| 亚洲午夜久久久久久尤物| 免费精品国产自产拍在| 亚洲av中文无码乱人伦在线观看| 国产a级特黄的片子视频免费| 爽爽爽爽爽爽爽成人免费观看| 7777久久亚洲中文字幕蜜桃| 国产麻豆剧传媒精品国产免费| 一个人免费播放在线视频看片| 亚洲色大成网站www永久| 午夜一级毛片免费视频| 丁香花在线观看免费观看图片| 337p欧洲亚洲大胆艺术| 国产一区二区免费在线| 无码av免费网站| 无码天堂va亚洲va在线va| 日韩亚洲人成在线综合日本| 手机在线免费视频| 最近的2019免费中文字幕| 99热亚洲色精品国产88| 中文字幕亚洲日韩无线码| 国产成人免费高清激情视频| aaa毛片视频免费观看| 国内精品久久久久影院亚洲 | 日本午夜免费福利视频| 免费看搞黄视频网站| 美女免费视频一区二区| 亚洲日本在线播放| 亚洲日韩乱码中文无码蜜桃臀网站| 无码国产精品一区二区免费I6| 中文字幕永久免费| 亚洲av最新在线观看网址| 337p日本欧洲亚洲大胆艺术| 久久夜色精品国产亚洲av| 午夜免费福利在线观看| 99久久久国产精品免费牛牛四川 | 在人线av无码免费高潮喷水| 免费国产污网站在线观看| 在线观看亚洲电影| 亚洲最大的成人网|