青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

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

編寫大容量和健壯的服務(wù)器系列—處理IOCP資源釋放  2007-08-21 15:24

字號(hào): ? ?

?

鄧立波 深圳,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)載,公開(kāi)發(fā)布,拷貝,傳播本文獻(xiàn)的全部或部分

? ?

1 問(wèn)題定義

一般的,我們需要在連接關(guān)閉(包括主動(dòng)或被動(dòng)關(guān)閉)時(shí)釋放以下資源:

(1) 一個(gè)或多個(gè)接收/發(fā)送緩存,一個(gè)信令緩存(用作拼包,可能一次WSARecv僅收

到半個(gè)信令,這時(shí)需要一個(gè)緩存先保存這半個(gè)信令,繼續(xù)發(fā)出WSARecv 調(diào)用,直

到接收到一個(gè)完整信令)。

(2) 調(diào)用closesocket釋放socket資源。

主要的問(wèn)題是資源何時(shí)釋放,以及該在哪兒釋放。

?

2 緩存如何同socket綁定

方式一

發(fā)送緩存綁定到發(fā)送操作的OVERLAPPED中(一般通過(guò)擴(kuò)展OVERLAPPED結(jié)構(gòu)添加一個(gè)緩存指針變量),接受緩存和信令緩存綁定到接受操作的OVERLAPPED中,如果還有一些資源需要 IOCP處理發(fā)送/接收之外的地方訪問(wèn) ,你可以再動(dòng)態(tài)分配一個(gè)的結(jié)構(gòu)體,將其指針同CompletionKey邦定

方式二

使用一個(gè)Hash表,對(duì)每個(gè)連接定義一個(gè)連接上下文,按socket值索引,把一些資源,例如信令緩存指針置于hash中的上下文。

?

方式一優(yōu)點(diǎn)是速度快(其實(shí)也快不了多少),但卻存在資源在哪兒釋放,何時(shí)釋放的問(wèn)題。

對(duì)此,網(wǎng)絡(luò)上有兩篇文章討論過(guò):

本文作者:sodme
本文出處:http://blog.csdn.net/sodme
聲明:本文可以不經(jīng)作者同意任意轉(zhuǎn)載、復(fù)制、傳播,但任何對(duì)本文的引用均須保留本文的作者、出處及本行聲明信息!謝謝!

2 ? 狗尾續(xù)貂:利用引用計(jì)數(shù)在多線程中安全釋放資源

很慚愧,我無(wú)法理解前一篇文章中作者所假設(shè)的應(yīng)用環(huán)境,因此我無(wú)法判定是否這樣真能解決問(wèn)題,但至少我不放心真的這樣做,即使作者是對(duì)的,這種“獨(dú)特”的機(jī)制也會(huì)讓我對(duì)服務(wù)器的健壯性感到不安。后一文章使用引用計(jì)數(shù)的方式理論上是可行的,這個(gè)引用計(jì)數(shù)用于跟蹤你所分配的結(jié)構(gòu)體的動(dòng)態(tài)釋放,因此在所有引用到這個(gè)結(jié)構(gòu)體的地方都得做引用計(jì)數(shù)處理(increment reference或者decrement reference),更要命的是上層應(yīng)用也可能需要對(duì)這個(gè)結(jié)構(gòu)體保存一個(gè)引用(一般是保存結(jié)構(gòu)體的一個(gè)指針,即CompletionKey),因?yàn)榉?wù)器有時(shí)需要主動(dòng)發(fā)送數(shù)據(jù)到client端。這顯然比較麻煩,原本模塊內(nèi)部的復(fù)雜性被擴(kuò)散到上層代碼。一點(diǎn)疏急就可能就導(dǎo)致資源泄漏或重復(fù)釋放,或者訪問(wèn)已經(jīng)釋放的資源而發(fā)生內(nèi)存訪問(wèn)異常,一旦這種bug出現(xiàn)將很難跟蹤調(diào)試。作為一個(gè)基礎(chǔ)模塊的編寫者, 設(shè)計(jì)時(shí)就要考慮這一點(diǎn),無(wú)論誰(shuí)寫的代碼,好的結(jié)構(gòu)都可以起到強(qiáng)有力的約束作用,如果不是必要,我建議你不要用這種方式 。最后有一點(diǎn)需要注意的是,如果你沒(méi)有資源需要在IOCP處理發(fā)送/接收之外的地方訪問(wèn),你就不要去分配一個(gè)結(jié)構(gòu)體,以免增加額外的麻煩。

?

第二種方式自然更不會(huì)遇到重復(fù)資源釋放的問(wèn)題(你可以在任何地方關(guān)閉連接,并釋放相關(guān)資源),因?yàn)槟汜尫刨Y源時(shí),同時(shí)刪除hash表中的連接上下文,所以在釋放之前應(yīng)該檢查連接上下文是否存在,如果不存在,則表示資源已被釋放。需要注意的是對(duì)本次操作的發(fā)送/接收緩存應(yīng)該立刻釋放,同時(shí)這些緩存指針不必保存到上下文,而是綁定到相應(yīng)的OVERLAPPED。這種方式還有一個(gè)優(yōu)點(diǎn),可以跟蹤所有連接(例如逐一掃描所有連接,處理一些如心跳包之類的事情)。當(dāng)然你可能擔(dān)心hash表畢竟對(duì)速度有影響,我們舉個(gè)例子,你的IOCP一秒種需要處理10萬(wàn)個(gè)IO,則需要10萬(wàn)次hash操作,我想說(shuō)的是 10萬(wàn)次/一秒的hash其實(shí)對(duì)現(xiàn)在的CPU是非常輕松的,不用擔(dān)心它成為瓶頸。這種方式相對(duì)實(shí)現(xiàn)非常簡(jiǎn)單,出現(xiàn)bug也相對(duì)易于跟蹤,對(duì)于服務(wù)器的設(shè)計(jì)而言,我一直固執(zhí)的堅(jiān)持,穩(wěn)定性始終是第一的

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久久久综合| 欧美亚男人的天堂| 艳女tv在线观看国产一区| 久久亚洲视频| 国产精品腿扒开做爽爽爽挤奶网站| 狂野欧美激情性xxxx欧美| 一区二区三区欧美视频| 激情小说另类小说亚洲欧美| 国产精品久久久久久久久借妻 | 久久久久九九视频| 久久综合给合久久狠狠色| 久久久一区二区三区| 欧美成人午夜视频| 欧美日本网站| 国产精品亚洲综合久久| 国产亚洲视频在线观看| 亚洲黄页一区| 亚洲欧美偷拍卡通变态| 欧美激情综合五月色丁香小说| 亚洲人成久久| 欧美一区午夜视频在线观看| 欧美精品日韩三级| 国产精品www| 经典三级久久| 亚洲一区二区免费| 麻豆成人小视频| 亚洲午夜黄色| 欧美成人69av| 国产一区美女| 亚洲午夜高清视频| 久久性天堂网| 一本色道久久综合亚洲精品不| 久久精品午夜| 国产精品久久久久久一区二区三区| 国产一区三区三区| 日韩亚洲欧美一区| 久久久久久久久久久久久久一区 | 亚洲一区二区三区久久| 亚洲一区二区三区免费视频| 午夜精品剧场| 欧美在线视频在线播放完整版免费观看 | 欧美在线视频一区二区| 玖玖视频精品| 国产精品成人观看视频国产奇米| 国产一级精品aaaaa看| 最新国产の精品合集bt伙计| 在线性视频日韩欧美| 久久精品视频在线播放| 亚洲国产精品黑人久久久| 亚洲精品社区| 久久国产精品黑丝| 欧美日韩国产一级| 一区二区自拍| 午夜精品国产更新| 亚洲国产精品嫩草影院| 午夜视频在线观看一区| 欧美精品免费视频| 国产欧美日本一区视频| 国产一区二区日韩| 亚洲一区二区三区在线观看视频| 免费成人美女女| 亚洲一区二区成人| 欧美精品网站| 激情综合久久| 久久精品一二三| 99re这里只有精品6| 巨乳诱惑日韩免费av| 国产日韩欧美综合| 亚洲一区免费观看| 亚洲精品乱码久久久久久黑人| 久久久99国产精品免费| 国产精品视频免费观看www| 国产精品久久久久久久久久ktv| 国产精品久久精品日日| 久久青草久久| 韩国三级电影久久久久久| 欧美ed2k| 国产欧美日韩一区二区三区在线观看 | 91久久夜色精品国产九色| 欧美专区日韩视频| 国产日韩欧美在线| 国产区精品在线观看| 亚洲午夜小视频| 亚洲精品影院在线观看| 欧美国产欧美综合| 亚洲精品视频啊美女在线直播| 久久手机免费观看| 欧美日韩另类一区| 国产老肥熟一区二区三区| 99精品视频免费观看视频| 欧美成人高清视频| 久久婷婷一区| 欧美午夜在线视频| 久久不射电影网| 久久aⅴ乱码一区二区三区| 国产精品电影网站| 亚洲欧美日韩直播| 亚洲在线中文字幕| 国产午夜精品理论片a级大结局 | 亚洲男人的天堂在线| 国产精品欧美一区喷水| 欧美一级片久久久久久久| 亚洲性夜色噜噜噜7777| 国产美女精品视频免费观看| 久久精品亚洲乱码伦伦中文| 欧美一区二区三区视频在线| 一区在线播放视频| 亚洲国产女人aaa毛片在线| 欧美亚洲视频一区二区| 麻豆精品在线视频| 娇妻被交换粗又大又硬视频欧美| 欧美一级二级三级蜜桃| 午夜日韩在线| 亚洲精品视频在线| 国产一区在线播放| 欧美日韩一区在线视频| 久久国产精品电影| 欧美伊人久久| 日韩视频一区二区三区在线播放| 国产精品国产三级国产普通话蜜臀| 先锋资源久久| 一本大道av伊人久久综合| 欧美激情一区二区| 国产午夜精品美女视频明星a级| 久久精品夜色噜噜亚洲a∨ | 欧美午夜三级| 亚洲欧美网站| 久久亚洲风情| 亚洲一区二区精品| 久久精品最新地址| 国产精品成人一区二区网站软件| 国产色产综合产在线视频| 久久综合图片| 国产精品xnxxcom| 欧美高清在线一区| 国产日韩在线一区| 日韩午夜免费视频| 亚洲黄色尤物视频| 亚洲一区免费看| 一区二区黄色| 女同一区二区| 久久艳片www.17c.com| 国产精品成人在线观看| 91久久亚洲| 亚洲第一福利社区| 欧美自拍偷拍| 欧美伊人久久大香线蕉综合69| 欧美日韩人人澡狠狠躁视频| 开元免费观看欧美电视剧网站| 欧美日韩在线精品| 亚洲激情成人在线| 亚洲黄色免费网站| 久久影视三级福利片| 久久免费视频一区| 国产一区二区精品久久91| 亚洲男人第一av网站| 午夜精品免费视频| 国产精品美女久久久浪潮软件| 日韩视频二区| 中文亚洲免费| 久久久久欧美精品| 国产日韩欧美一区在线 | 亚洲国产精品电影| 久久久久一区二区| 玖玖玖国产精品| 伊人久久久大香线蕉综合直播 | 欧美日韩国产精品一区二区亚洲 | 日韩亚洲欧美一区| 亚洲五月六月| 国产精品乱码人人做人人爱| 亚洲一区二区三区精品视频| 午夜欧美精品久久久久久久| 国产精品视频内| 欧美亚洲在线| 麻豆国产精品va在线观看不卡| 好吊色欧美一区二区三区视频| 久久久www免费人成黑人精品| 美女爽到呻吟久久久久| 91久久国产综合久久91精品网站| 免费人成精品欧美精品| 亚洲精品国产精品国产自| 亚洲一级在线| 国产一区二区三区成人欧美日韩在线观看 | 久久精品成人一区二区三区| 老司机午夜精品视频| 亚洲国产精品一区| 欧美久久一级| 亚洲欧美日韩国产中文| 免费高清在线一区| 欧美 日韩 国产精品免费观看| 欧美一区二区免费观在线| 国产精品剧情在线亚洲| 久久se精品一区精品二区| 美女成人午夜| 亚洲亚洲精品在线观看 | 欧美亚洲综合另类| 最新国产拍偷乱拍精品| 国产精品v一区二区三区| 久久成人一区二区| 亚洲卡通欧美制服中文|