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

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>
            欧美理论片在线观看| 亚洲校园激情| 欧美激情第五页| 亚洲男女自偷自拍| 欧美日韩直播| 夜夜躁日日躁狠狠久久88av| 欧美jizzhd精品欧美喷水| 欧美在线一二三四区| 国产欧美日韩综合精品二区| 亚洲制服av| 亚洲人成小说网站色在线| 午夜精品偷拍| 国产日韩欧美亚洲| 欧美一区午夜精品| 国产精品99久久久久久人| 欧美日韩精品免费观看视频完整| 亚洲精品影视在线观看| 亚洲片区在线| 久久久久国产精品一区二区| 亚洲视频在线一区| 国产精品久久久久久久免费软件| 一区二区三区波多野结衣在线观看| 亚洲国产日本| 欧美日韩精品在线观看| 亚洲在线中文字幕| 欧美一区二区精品久久911| 国产午夜久久| 麻豆亚洲精品| 欧美极品aⅴ影院| 亚洲无人区一区| 亚洲嫩草精品久久| 伊人天天综合| 亚洲六月丁香色婷婷综合久久| 欧美日韩在线视频一区二区| 香蕉成人伊视频在线观看| 久久国产婷婷国产香蕉| 亚洲人体1000| 亚洲伊人网站| 亚洲国产精品va| 亚洲精品在线观看免费| 国产精品揄拍一区二区| 欧美h视频在线| 欧美新色视频| 久久手机免费观看| 欧美日韩免费观看一区二区三区| 性色av一区二区三区红粉影视| 欧美一区午夜精品| 亚洲精品永久免费精品| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 免费av成人在线| 欧美黑人多人双交| 午夜视频在线观看一区二区三区 | 国产主播精品| 日韩五码在线| 激情文学一区| 在线一区观看| 亚洲欧洲日本在线| 国产精品美女久久久久av超清 | 亚洲国产精品嫩草影院| 一区二区三区欧美| 精品91在线| 亚洲在线1234| 99一区二区| 久久蜜臀精品av| 翔田千里一区二区| 欧美日本一区二区视频在线观看| 久久精品国产69国产精品亚洲 | 亚洲第一主播视频| 亚洲一区在线播放| 国产精品99久久久久久久女警 | 亚洲福利视频一区二区| 国产日韩欧美另类| 亚洲精品小视频| 在线观看欧美日韩国产| 亚洲视频在线一区| 亚洲区在线播放| 久久狠狠亚洲综合| 午夜精品久久久久久久久久久| 欧美男人的天堂| 蜜臀久久99精品久久久久久9| 国产精品久久久久一区二区三区共| 免费观看日韩| 国产视频一区在线观看一区免费| 亚洲国产精品v| 国产一区在线播放| 午夜精品亚洲| 欧美一区二区三区四区高清| 欧美日韩免费观看中文| 亚洲黄色av一区| 亚洲国产精品精华液2区45| 亚洲欧美在线一区| 午夜欧美大片免费观看| 国产精品你懂的在线欣赏| 亚洲激情在线观看视频免费| 亚洲精品影院在线观看| 欧美国产精品久久| 亚洲日本中文字幕| 日韩小视频在线观看| 欧美激情欧美激情在线五月| 国产亚洲毛片在线| 亚洲尤物在线| 久久精品免费播放| 国产免费成人av| 亚洲一区二区三区欧美| 欧美一区二区三区在线观看视频| 国产美女精品视频免费观看| 亚洲欧美中文日韩v在线观看| 欧美亚洲免费电影| 国产欧美日韩三级| 久久国产精品99国产精| 久久久人成影片一区二区三区观看| 韩日欧美一区| 蜜臀av一级做a爰片久久| 亚洲国产另类久久久精品极度| 欧美日韩中国免费专区在线看| 亚洲精品韩国| 在线视频精品一区| 国产精品国产a| 欧美在线综合| 欧美+亚洲+精品+三区| 亚洲国产精品成人综合色在线婷婷| 久热精品视频在线免费观看| 亚洲大胆女人| 亚洲欧美一区二区原创| 国产欧美日韩不卡| 久久久久久久一区二区| 91久久黄色| 性欧美暴力猛交另类hd| 在线精品视频一区二区三四| 欧美激情一二三区| 亚洲一区免费看| 久久综合九色综合网站| 伊人天天综合| 国产精品成人在线| 久久国产精彩视频| 91久久久久| 欧美一区国产在线| 亚洲精品久久久久中文字幕欢迎你 | 欧美专区日韩专区| 免费av成人在线| 香蕉乱码成人久久天堂爱免费| 激情av一区| 欧美体内she精视频在线观看| 欧美在线观看视频| 亚洲欧洲免费视频| 久久青草久久| 亚洲视频www| 激情婷婷亚洲| 国产精品美女www爽爽爽| 欧美国产日韩在线| 久久国产99| 亚洲免费视频观看| 亚洲精品小视频| 欧美国产欧美综合| 毛片基地黄久久久久久天堂| 亚洲影院污污.| 最新国产の精品合集bt伙计| 亚洲免费av观看| 欧美/亚洲一区| 久久久国产91| 亚洲综合99| av不卡在线| 99精品视频免费观看视频| 国产最新精品精品你懂的| 欧美日韩高清在线播放| 久久久夜夜夜| 欧美一区二区三区四区夜夜大片 | 美日韩在线观看| 午夜精品成人在线视频| 日韩午夜精品视频| 亚洲国产精品国自产拍av秋霞| 免费在线观看日韩欧美| 欧美一区二区日韩| 在线中文字幕一区| 日韩午夜中文字幕| 一区二区三区 在线观看视| 亚洲国产美女精品久久久久∴| 国内外成人在线视频| 国产欧美午夜| 国产一区二区三区高清| 国产日韩欧美在线| 国产人成精品一区二区三| 国产精品久久777777毛茸茸| 欧美性淫爽ww久久久久无| 亚洲欧美日韩精品| 久久精品五月婷婷| 欧美一区2区三区4区公司二百| 亚洲欧美日本日韩| 亚洲一级在线| 亚洲欧美日韩精品久久亚洲区 | 夜夜夜精品看看| 99精品视频免费观看视频| 亚洲精品欧美一区二区三区| 99国内精品久久| 日韩视频在线观看一区二区| 亚洲美女诱惑| 亚洲影院在线| 欧美在线观看网址综合| 久久字幕精品一区| 欧美精品1区2区|