• <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.¢%

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

            談?wù)処OCP發(fā)送數(shù)據(jù)時(shí)的一些誤區(qū)及技巧  2007-08-24 11:06

            字號: ? ?

            ?

            ?

            鄧立波 深圳,2007-8

            作者聯(lián)系方式 :

            email:???????? libodeng@gmail.com

            msn:? ???????? libodeng@gmail.com

            tel:???? ???????? 13510275799

            版權(quán)/著作權(quán)所有 (C) 2007 鄧立波 保留所有權(quán)利

            警告:未經(jīng)作者許可,任何人或組織不得轉(zhuǎn)載,公開發(fā)布,拷貝,傳播本文獻(xiàn)的全部或部分

            ?

            誤區(qū)一,使用 send 函數(shù)發(fā)送數(shù)據(jù)

            ?????? 一些人使用阻塞的 send 函數(shù)發(fā)送數(shù)據(jù),這是絕對應(yīng)該避免的,一旦某一個(gè)連接傳輸發(fā)生擁塞,或者突然中斷而沒有通知,調(diào)用 send 函數(shù)的線程將可能被阻塞很長一段時(shí)間(可能 10 秒或更長),尤其是當(dāng)服務(wù)器同時(shí)處理成千上萬個(gè)連接時(shí),這種情況可能會(huì)頻繁出現(xiàn)。

            ?????? 使用非阻塞的 send 也不適合,數(shù)據(jù)不一定每次都能完全發(fā)送出去,你得使用 select 跟蹤這些 socket 的發(fā)送狀態(tài)(一旦可能,發(fā)送剩余數(shù)據(jù)),這失去了 IOCP 的優(yōu)勢。

            ?

            誤區(qū)二,在多個(gè)工作線程的情況下使用 PostQueuedCompletionStatus

            ?????? 使用 PostQueuedCompletionStatus IOCP 發(fā)送一個(gè)“寫數(shù)據(jù) IO 包”,然后由 IOCP 在工作線程里面調(diào)用 WSASend 發(fā)送數(shù)據(jù),這在單個(gè)工作線程存在的情況下是安全的,這些“寫數(shù)據(jù) IO 包”將按它們被投遞的順序取出,并在工作線程中逐一處理。但在多個(gè)工作線程存在的情況下,數(shù)據(jù)仍然按它們投遞的順序取出,但處理不一定有序(即 WSASend 不一定按 PostQueuedCompletionStatus 投遞的順序被調(diào)用,iocp是個(gè)嚴(yán)格的fifo,線程切換卻是隨機(jī)的),而導(dǎo)致對方接收到的數(shù)據(jù)可能出現(xiàn)亂序。

            ?

            ?

            比較好的一種方式是使用調(diào)用 WSASend 直接發(fā)送數(shù)據(jù),注意對同一個(gè)連接連續(xù)調(diào)用多次 WSASend 是安全的,而不需要等到前一個(gè) WSASend 的操作完成,數(shù)據(jù)將按調(diào)用 WSASend 的順序發(fā)送。

            在大多數(shù)情況下,上面的方式都可以滿足要求,但對一個(gè)大容量和高并發(fā)的服務(wù)器,可能還需要對同一個(gè)連接限制并發(fā)的 IO 次數(shù),以避免沖擊可分頁內(nèi)存鎖定極限和非分頁內(nèi)存極限,更好的方式是對每個(gè)連接僅允許一個(gè) pending send IO ,這可以通過建一個(gè)發(fā)送緩存隊(duì)列實(shí)現(xiàn),當(dāng) WSASend 未返回操作完成時(shí),后續(xù)提交的數(shù)據(jù)將放置于發(fā)送隊(duì)列,直到 WSASend 完成,然后從發(fā)送隊(duì)列取出一塊數(shù)據(jù),繼續(xù)發(fā)送。

            亚洲国产另类久久久精品黑人| 久久精品国产亚洲AV香蕉| 久久精品国产99久久无毒不卡| 久久久久亚洲AV成人网| 日本精品久久久中文字幕| 韩国免费A级毛片久久| 日韩精品久久无码中文字幕| 中文字幕无码av激情不卡久久| 青草久久久国产线免观| 久久久久国色AV免费观看| 国产免费久久精品丫丫| 精品免费久久久久国产一区 | 精品熟女少妇aⅴ免费久久| 日韩亚洲欧美久久久www综合网| 久久国产成人精品麻豆| 亚洲国产精品久久久久久| 国产综合成人久久大片91| 青春久久| 亚洲国产精品无码久久一线| 久久夜色精品国产欧美乱| 999久久久免费精品国产| 久久国产精品久久| 欧美亚洲另类久久综合婷婷| 久久天天躁狠狠躁夜夜躁2014| 亚洲AV无一区二区三区久久| .精品久久久麻豆国产精品| 91精品久久久久久无码| 久久人搡人人玩人妻精品首页| 18禁黄久久久AAA片| 国内精品久久人妻互换| 成人精品一区二区久久| 中文字幕精品久久| 久久99精品久久久久久久不卡| 久久综合狠狠综合久久激情 | 久久久WWW成人免费毛片| 99久久做夜夜爱天天做精品| 久久国产色AV免费观看| 久久九色综合九色99伊人| 久久亚洲精精品中文字幕| 久久电影网| 久久99亚洲网美利坚合众国|