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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks
                  現(xiàn)在很多系統(tǒng)中,特別是事件驅(qū)動的系統(tǒng)中,對于線程池的維護(hù)很多時(shí)候根據(jù)業(yè)務(wù)處理類型的不同做劃分和管理,但分開維護(hù)會帶來下面兩個問題: 

          1. 到處線程池,每個線程池都有上限設(shè)置,但是所有線程池到達(dá)上限的時(shí)候也許系統(tǒng)已經(jīng)無法承受了,所以局部設(shè)計(jì)和限制無法達(dá)到全局限制的目標(biāo)。

          2. 合理的利用線程池的資源,當(dāng)線程池邏輯上真實(shí)隔離后,就無法將空閑的線程資源借調(diào)給繁忙的任務(wù)處理使用。

          設(shè)計(jì)中關(guān)注的:

            虛擬隔離線程池需要有模型可以保證對于一些處理的保護(hù),對于一些處理的降級。

          設(shè)計(jì)思路:

            簡單的兩種配置模式:保留,限制。

          舉個例子:

            默認(rèn)線程池大小設(shè)置為100

              A類任務(wù)設(shè)置為保留10B類任務(wù)設(shè)置為限制50

            假設(shè)有A,B,C三種任務(wù)進(jìn)入。

              A最大可以使用100個線程,其中10個是它獨(dú)占的(通過配置可以選擇優(yōu)先使用公有的還是私有的)

              B最大可以使用50個線程,當(dāng)公有線程(100-10=90)被消耗后剩余總數(shù)小于50,那么B消耗的數(shù)量就會小于50,假如公有90個線程都沒有被消耗,此時(shí)B最多也只能消耗50個線程。總結(jié)來說,B消耗公有的線程資源,同時(shí)最多只能消耗他的設(shè)置(當(dāng)然他設(shè)置如果超過公有線程,則以公有線程池最大作為上限)

              C最大可以使用90個線程,也就是所有的公有線程。

          當(dāng)任何一種請求沒有線程資源可以被使用的時(shí)候,將會被放入隊(duì)列,等待線程可用,隊(duì)列不區(qū)分任務(wù)類型。

              第一版簡單的Java代碼參看:http://www.rayfile.com/zh-cn/files/66a89e61-4357-11e0-9ad5-0015c55db73d/
                  這里只是探討一種簡單的設(shè)計(jì)思路,以最小代價(jià)來全局化管理維護(hù)線程池或者資源池。

          posted on 2011-03-01 00:32 岑文初 閱讀(5165) 評論(4)  編輯  收藏

          評論

          # re: 邏輯劃分線程池 2011-03-01 11:57 Any
          建議代碼放到github上, 方便參與進(jìn)來!  回復(fù)  更多評論
            

          # re: 邏輯劃分線程池 2011-03-01 12:25 岑文初
          @Any
          http://code.google.com/p/sharedthreadpool/  回復(fù)  更多評論
            

          # re: 邏輯劃分線程池 2011-03-05 17:40 風(fēng)景畫
          這里只是探討一種簡單的設(shè)計(jì)思路很強(qiáng)大,方便參與進(jìn)來!  回復(fù)  更多評論
            

          # re: 邏輯劃分線程池 2012-05-25 18:23 thegodofwar9
          仔細(xì)看了一下你的實(shí)現(xiàn)代碼,思路很好,但是JobDispatcher的submitJob方法、beforeExecuteJob方法、releaseJob方法在多個線程里并發(fā)運(yùn)行情況下,這些方法里面的多個原子性操作合在一起并不是原子操作,也就是多個線程同時(shí)可以訪問修改JobDispatcher里面的資源,加鎖必然會帶來很大的性能損失,不知道你這樣不加鎖會不會導(dǎo)致有些特殊情況出錯?  回復(fù)  更多評論
            


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 双流县| 寿阳县| 荆门市| 新建县| 成安县| 金门县| 喜德县| 成都市| 息烽县| 廉江市| 阜宁县| 丹江口市| 信丰县| 滕州市| 尚义县| 麻栗坡县| 丰都县| 宜兴市| 五家渠市| 依兰县| 于田县| 新密市| 平遥县| 江口县| 盐城市| 四川省| 任丘市| 鞍山市| 德安县| 仁怀市| 尼木县| 富平县| 临城县| 鄂托克前旗| 西昌市| 那坡县| 通城县| 南丹县| 上犹县| 淮安市| 玛纳斯县|