• <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>

            eXile 的專欄

            Reactor模式中網(wǎng)絡(luò)事件分派探討


            原文地址: http://www.shnenglu.com/eXile

               對于使用線程池的Reactor模式,針對每一個SOCKET句柄的事件處理器handler可能被分派到不同的線程當中,這就要求handler的每一個操作都是線程安全的。
              可以使用一種辦法使一個handler的操作只能分派到一個線程中:為每一個handler設(shè)定一個線程所有者ID,一開始ID為空,則每個線程都可以分派,第一次分派之后,則設(shè)定為該線程ID,以后只分派到該線程中。這樣,可以保證handler操作的單線程性,簡化以后handler的具體實現(xiàn)。這個ID也可以靈活設(shè)置,以適應(yīng)具體事務(wù)的要求。
              但這樣并不能保證handler徹底無鎖,因為還會有兩個線程會出現(xiàn)竟爭,除了這個事件處理線程以外,還有事件分派線程(即事件偵聽線程)。對于這個問題的解決辦法如下:為每個handler設(shè)定一個原子計數(shù),事件分派線程在分派事件前,首先設(shè)定該原子計數(shù),若設(shè)置失敗,表明此時正有其它線程在處理該handler,則并不分派該事件,而是將它置于一個pending隊列中,等待以后分派。
               還有一種簡單的方法,就是將該handler直接掛起,處理完后才允許進行事件分派。

            posted on 2008-05-22 15:27 eXile 閱讀(2668) 評論(7)  編輯 收藏 引用 所屬分類: 網(wǎng)絡(luò)開發(fā)

            評論

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-22 20:51 true

            想必你看過ace,有個TP_Reactor  回復(fù)  更多評論   

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-22 22:21 eXile

            ACE的TP_Reactor 是基于‘領(lǐng)導(dǎo)者/跟隨者’模式,這里的探討主要是針對半同步半異步模式。不過要實現(xiàn)一個無鎖的handler,‘領(lǐng)導(dǎo)者/跟隨者’模式應(yīng)該更容易一些。   回復(fù)  更多評論   

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-22 22:47 eXile

            對ACE的TP_Reactor沒有過深研究,boost::asio中的reactor也是‘領(lǐng)導(dǎo)者/跟隨者’模式,不過asio并不保證這一點,還得自己加鎖  回復(fù)  更多評論   

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-23 10:06 bugs_killer

            我覺得根本就不會出現(xiàn)分配到多線程的問題..
            假如1. socket_1 接收到消息..那么我們把它分配到線程1. 同時我們也要將此句柄從select中移除.. 不然地話.它會馬上又觸發(fā)可讀事件. 如果照這種邏輯一個句柄是有可能同時分配到多個線程.但這種邏輯是錯誤的..

            我想應(yīng)該是這樣的.. ACE的作者有一篇文件講領(lǐng)導(dǎo)者/跟隨者 模式的..里邊有提到.

            文檔的名字叫 lf.pdf  回復(fù)  更多評論   

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-23 12:07 eXile

            謝謝修正,沒有看過,不過對于簡單的LF模型確實是這樣的,因為它可以使用阻塞IO或者單獨select,處理起來比較簡單。  回復(fù)  更多評論   

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-23 12:39 eXile

            對于半同步半異步模式也可以在線程間傳遞socket描述符來簡化處理,但這樣業(yè)務(wù)邏輯就不容易和底層IO脫離, 處理起來要麻煩一些, 我想的也不成熟,歡迎探討。
            BTW,已經(jīng)找到了 lf.pdf 和 hs-ha.pdf , 看來要研讀一下....  回復(fù)  更多評論   

            # re: Reactor模式中網(wǎng)絡(luò)事件分派探討 2008-05-23 19:12 bugs_killer

            多多交流啊...

            msn: shaovie@hotmail.com
            QQ : 43458943  回復(fù)  更多評論   

            導(dǎo)航

            <2007年9月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            統(tǒng)計

            常用鏈接

            留言簿(18)

            隨筆分類

            隨筆檔案

            服務(wù)器編程

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久夜色精品国产| 国产精品久久久久国产A级| 精品无码久久久久久久久久| 国产高潮久久免费观看| 久久久久久极精品久久久| 久久久久久久波多野结衣高潮| 99久久综合国产精品免费| 狼狼综合久久久久综合网| 国产精品久久久99| 亚洲级αV无码毛片久久精品| 久久国产乱子精品免费女| 久久久久久久综合狠狠综合| 国产午夜福利精品久久2021| 午夜精品久久影院蜜桃| 狠色狠色狠狠色综合久久| 亚洲精品乱码久久久久久不卡| 99久久99这里只有免费的精品| 少妇被又大又粗又爽毛片久久黑人| 国产精品免费福利久久| 香蕉aa三级久久毛片| 99久久婷婷国产综合精品草原| 蜜臀av性久久久久蜜臀aⅴ| 日日狠狠久久偷偷色综合96蜜桃| 国产精品久久久久…| 久久精品无码一区二区无码 | 一本大道久久东京热无码AV| 国产成人综合久久综合| 久久婷婷五月综合97色| 久久狠狠爱亚洲综合影院| 亚洲人成无码久久电影网站| 久久99亚洲综合精品首页| 一本久久a久久精品综合夜夜| 久久不见久久见免费视频7| 日本强好片久久久久久AAA| 久久综合九色综合网站| 久久人人添人人爽添人人片牛牛| 久久精品国产亚洲Aⅴ蜜臀色欲| 91性高湖久久久久| 久久国产美女免费观看精品| 精品久久久久久无码免费| 精品久久久久久久久久久久久久久 |