<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    放翁(文初)的一畝三分地

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks

    CometPipe數(shù)據(jù)發(fā)送一點改動

    Author:放翁(文初)

     

    場景:

    前提:長連接推送(每個請求會話時間保持較久)在事件驅(qū)動模式下,多線程可能同時完成任務(wù)并通過Http長連接下發(fā)數(shù)據(jù),對于Response需要有一定的并發(fā)保護(hù)。

     

    第一版

             增加一個lock,獲得以后才可以使用Response

             每個線程的處理流程:get lock à use response àrelease lock

             在同一個通道的事件大量并發(fā)產(chǎn)生的時候,由于use response比較“重”,使得大量線程生命周期加大(順序的獲取鎖),上下文切換頻繁,系統(tǒng)load較高。

     

    第二版(現(xiàn)在的版本)

             去掉lock,為每一個請求會話增加一個隊列和后臺線程。

             每個線程的處理流程:add message to queue

             后臺線程block to wait message and deliver

             第一版的問題不存在了,但在沒有消息下行的時候,大量后臺線程block wait,對于內(nèi)存來說還是有些浪費。

     

    復(fù)雜卻未必有好效果的版本

    從上面來看,需要做的就是防止將發(fā)送數(shù)據(jù)放入競爭事務(wù)(也就是一個時期只有一個線程負(fù)責(zé)對隊列數(shù)據(jù)的獲取和下發(fā)),需要復(fù)用線程為多個請求處理下行任務(wù)。


                                                                

    大致解釋一下流程:

    1.  每個線程在放入隊列的時候需要先獲得讀寫鎖的讀鎖,然后將數(shù)據(jù)放入隊列。具體獲得讀鎖的目的最后談。

    2.  線程判斷是否已經(jīng)有后臺支持線程來處理消息下發(fā),如果沒有嘗試的去操作needworkerflag的原子布爾對象。

    3.  線程如果成功的將needworkerflag原子布爾對象由true改成了false狀態(tài),那么表示他獲得了取得線程事件的令牌,就向線程池發(fā)起執(zhí)行下發(fā)消息的任務(wù)。

    4.  線程池收到任務(wù)后,分配一個線程循環(huán)的去獲取數(shù)據(jù)并下發(fā),直到隊列瞬時為空。

    5.  獲取寫鎖,重新再檢查隊列是否有數(shù)據(jù),如果有下行,然后修改needworkerflagtrue,最后釋放寫鎖。(用讀寫鎖就是為了在后臺線程退出時保證隊列中的被加入的數(shù)據(jù)完全被執(zhí)行,而沒有并發(fā)導(dǎo)致遺留數(shù)據(jù)在隊列但沒有任何線程處理的情況,帶來的壞處就是在這個寫鎖臨界區(qū)里面會有寫出動作會阻塞外部在那個時候放數(shù)據(jù)的過程)

     

    設(shè)計很復(fù)雜,能夠帶來的比第二個設(shè)計好的點就是可能在消息并發(fā)較低的時候充分利用資源,但壞處還是很多的,包括線程切換,線程退出時的短時阻塞,線程池容量大小的考慮。

     

    大家如果有更好的設(shè)計和實現(xiàn)的方式可以一起討論并給出設(shè)計和實現(xiàn)的細(xì)節(jié)說明。

     

    posted on 2011-06-23 12:16 岑文初 閱讀(4547) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费无码不卡视频在线观看| 亚洲精品成人区在线观看| 久久亚洲AV成人无码国产最大| 亚洲av日韩片在线观看| 久久精品免费电影| 亚洲美国产亚洲AV| 亚洲V无码一区二区三区四区观看 亚洲αv久久久噜噜噜噜噜 | 免费A级毛片无码A∨| 亚洲AV日韩综合一区尤物| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 99免费观看视频| 色www免费视频| 亚洲精品成人网站在线播放| 日本无吗免费一二区| 精品国产免费一区二区三区香蕉| 亚洲一区二区免费视频| 亚洲精品国产精品乱码在线观看| 久久久久久99av无码免费网站 | 在线日韩av永久免费观看| 国产成人免费ā片在线观看老同学| 丁香婷婷亚洲六月综合色| 国产亚洲成归v人片在线观看| 免费99精品国产自在现线| 男女一边桶一边摸一边脱视频免费 | 日本xxxx色视频在线观看免费| 亚洲AV无码AV日韩AV网站| 亚洲情a成黄在线观看动漫尤物| 日本人护士免费xxxx视频| 亚洲成人免费网址| 国产精品内射视频免费| 亚洲精品无码成人| 亚洲国语精品自产拍在线观看| 免费a级毛片永久免费| 最新欧洲大片免费在线 | 卡1卡2卡3卡4卡5免费视频| 真实国产乱子伦精品免费| 黄视频在线观看免费| mm1313亚洲国产精品无码试看| 国产亚洲sss在线播放| 久久精品国产亚洲av影院| 中文字幕亚洲日本岛国片|