• <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>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

              消息隊列鎖調用太頻繁的問題算是解決了,另一個讓人有些苦惱的大概是這太多的內存分配和釋放操作了。頻繁的內存分配不但增加了系統開銷,更使得內存碎片不斷增多,非常不利于我們的服務器長期穩定運行。也許我們可以使用內存池,比如SGI STL中附帶的小內存分配器。但是對于這種按照嚴格的先進先出順序處理的,塊大小并不算小的,而且塊大小也并不統一的內存分配情況來說,更多使用的是一種叫做環形緩沖區的方案,mangos的網絡代碼中也有這么一個東西,其原理也是比較簡單的。



              就好比兩個人圍著一張圓形的桌子在追逐,跑的人被網絡IO線程所控制,當寫入數據時,這個人就往前跑;追的人就是邏輯線程,會一直往前追直到追上跑的人。如果追上了怎么辦?那就是沒有數據可讀了,先等會兒唄,等跑的人向前跑幾步了再追,總不能讓游戲沒得玩了吧。那要是追的人跑的太慢,跑的人轉了一圈過來反追上追的人了呢?那您也先歇會兒吧。要是一直這么反著追,估計您就只能換一個跑的更快的追逐者了,要不這游戲還真沒法玩下去。

              前面我們特別強調了,按照嚴格的先進先出順序進行處理,這是環形緩沖區的使用必須遵守的一項要求。也就是,大家都得遵守規定,追的人不能從桌子上跨過去,跑的人當然也不允許反過來跑。至于為什么,不需要多做解釋了吧。

              環形緩沖區是一項很好的技術,不用頻繁的分配內存,而且在大多數情況下,內存的反復使用也使得我們能用更少的內存塊做更多的事。

              在網絡IO線程中,我們會為每一個連接都準備一個環形緩沖區,用于臨時存放接收到的數據,以應付半包及粘包的情況。在解包及解密完成后,我們會將這個數據包復制到邏輯線程消息隊列中,如果我們只使用一個隊列,那這里也將會是個環形緩沖區,IO線程往里寫,邏輯線程在后面讀,互相追逐。可要是我們使用了前面介紹的優化方案后,可能這里便不再需要環形緩沖區了,至少我們并不再需要他們是環形的了。因為我們對同一個隊列不再會出現同時讀和寫的情況,每個隊列在寫滿后交給邏輯線程去讀,邏輯線程讀完后清空隊列再交給IO線程去寫,一段固定大小的緩沖區即可。沒關系,這么好的技術,在別的地方一定也會用到的。
            97久久国产亚洲精品超碰热| 成人综合久久精品色婷婷| 精品伊人久久大线蕉色首页| 精品久久8x国产免费观看| 久久精品综合一区二区三区| 久久伊人精品一区二区三区 | 无码精品久久久久久人妻中字| 无码超乳爆乳中文字幕久久 | 久久久久人妻一区二区三区vr| 久久久中文字幕日本| 国产国产成人精品久久| 精品无码久久久久久国产| 99re久久精品国产首页2020| 国产精品永久久久久久久久久| 久久久噜噜噜www成人网| 久久99精品国产99久久6| 性欧美丰满熟妇XXXX性久久久| 丁香五月综合久久激情| 久久99国产乱子伦精品免费| 欧美久久久久久午夜精品| 精品一二三区久久aaa片| 久久er国产精品免费观看8| 国产V亚洲V天堂无码久久久| 久久久久亚洲国产| 亚洲国产成人久久一区久久| 久久电影网2021| 精品永久久福利一区二区| 久久成人小视频| 精品国产乱码久久久久久呢| 久久精品国产久精国产一老狼| 国产呻吟久久久久久久92| 91精品国产乱码久久久久久| 亚洲精品乱码久久久久久自慰| 女同久久| 中文精品99久久国产 | 国产精自产拍久久久久久蜜| 久久99精品久久久久久hb无码| 婷婷久久久亚洲欧洲日产国码AV| 久久久无码精品亚洲日韩京东传媒| 人人狠狠综合久久亚洲| 久久亚洲精品无码播放|