• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            IOCP Tips

            Posted on 2009-02-11 08:58 S.l.e!ep.¢% 閱讀(184) 評論(0)  編輯 收藏 引用 所屬分類: VC

            IOCP Tips

            Posted on 2008-03-12 11:51 小明 閱讀(2913) 評論(7) ?編輯?收藏引用 所屬分類: Win32Network/ACE

            Tip 1 : 使用WSASend/WSARecv來收發(fā)數(shù)據(jù),而不是使用ReadFile/WriteFile
            一句話,前者具有更好的性能

            Tip 2:? 理解IOCP的最大并發(fā)線程數(shù)和工作線程數(shù)
            應(yīng)該讓工作線程數(shù)(調(diào)用GetQueuedCompletionStatus那些線程)大于等于在CreateIoCompletionPort 指定的NumberOfConcurrentThreads數(shù)。
            標準做法是永遠設(shè)置NumberOfConcurrentThreads=0

            Tip 3: 利用GetQueuedCompletionStatus的completion key和overlapped structure參數(shù)在異步操作中來傳遞信息
            通常completion key用來傳遞和handle/socket/session的信息
            而overlapped structure用來傳遞每次異步I/O的一些信息,通常的做法是會定義一個structure來派生于OVERLAPPED
            struct MY_IO_DATA : public OVERLAPPED

            Tip 4: 理解IOCP的完成包的排隊行為
            從GetQueuedCompletionStatus得到完成包的次序可能跟調(diào)用WSASend/WSARecv的次序不一樣。
            微軟唯一保證是如果調(diào)用WSASend/WSARecv得到SUCCESS或者IO_PENDING,就一定會有一個完成包出現(xiàn)在IOCP的隊列上,不管這個socket是否關(guān)閉了。
            如果關(guān)閉socket,那么之后的WSASend/WSARecv調(diào)用就一定返回失敗的結(jié)果。

            關(guān)于IOCP包可能次序錯亂和解決方法,有一篇文章可以參考: http://www.codeproject.com/KB/IP/reusablesocketserver4.aspx
            我的做法是避免多次調(diào)用WSARecv


            Tip 5: IOCP的清除
            最重要的一點是,在I/O完成之前,不要釋放overlapped structure??梢杂肏asOverlappedIoCompleted來監(jiān)測OV是否完成。

            通常的做法是
            1) 調(diào)用PostQueueCompletionStatus N次(N=工作線程數(shù)),來傳遞特殊的退出信息給所有的工作線程
            2) 關(guān)閉所有的socket,如果很在意處理完未完成的數(shù)據(jù)包,需要使用一個計數(shù)器來跟蹤異步I/O事件,直到計數(shù)器為0,才關(guān)閉相應(yīng)的socket
            3) 關(guān)閉completion port

            亚洲国产精品无码久久久久久曰| 久久久老熟女一区二区三区| 久久中文字幕无码专区| 一级a性色生活片久久无| 欧洲成人午夜精品无码区久久| 精品久久久久久中文字幕人妻最新| 岛国搬运www久久| 久久久久免费看成人影片| 国内精品伊人久久久久网站| 久久精品卫校国产小美女| 亚洲综合婷婷久久| 欧美黑人激情性久久| 久久有码中文字幕| 精品国产乱码久久久久久郑州公司| 四虎国产精品成人免费久久| 狠色狠色狠狠色综合久久| 久久婷婷五月综合国产尤物app| 久久国产精品99精品国产987| 精品国产乱码久久久久久人妻| 久久精品国产福利国产琪琪| 91精品国产色综合久久| 亚洲精品午夜国产VA久久成人| 亚洲国产精品成人久久蜜臀| 久久精品国产亚洲7777| 蜜桃麻豆www久久| 精品久久久久久久| 久久久久久久久久久久中文字幕 | 国产精品一区二区久久精品涩爱 | 99热热久久这里只有精品68| 久久99国产精品一区二区| 久久免费的精品国产V∧| 久久久亚洲欧洲日产国码是AV| 久久婷婷是五月综合色狠狠| 久久九九久精品国产| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 亚洲国产精品综合久久网络| 久久九色综合九色99伊人| 狠狠色综合久久久久尤物| 精品久久综合1区2区3区激情| 国产精品久久久久久久久久免费| 国产亚洲精午夜久久久久久|