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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks
                  現在很多系統中,特別是事件驅動的系統中,對于線程池的維護很多時候根據業務處理類型的不同做劃分和管理,但分開維護會帶來下面兩個問題: 

          1. 到處線程池,每個線程池都有上限設置,但是所有線程池到達上限的時候也許系統已經無法承受了,所以局部設計和限制無法達到全局限制的目標。

          2. 合理的利用線程池的資源,當線程池邏輯上真實隔離后,就無法將空閑的線程資源借調給繁忙的任務處理使用。

          設計中關注的:

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

          設計思路:

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

          舉個例子:

            默認線程池大小設置為100。

              A類任務設置為保留10B類任務設置為限制50

            假設有A,B,C三種任務進入。

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

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

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

          當任何一種請求沒有線程資源可以被使用的時候,將會被放入隊列,等待線程可用,隊列不區分任務類型。

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

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

          評論

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

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

          # re: 邏輯劃分線程池 2011-03-05 17:40 風景畫
          這里只是探討一種簡單的設計思路很強大,方便參與進來!  回復  更多評論
            

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


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


          網站導航:
           
          主站蜘蛛池模板: 衢州市| 读书| 内丘县| 江达县| 莱州市| 喀喇沁旗| 浠水县| 靖远县| 永嘉县| 雷州市| 灵山县| 扬中市| 孝感市| 平远县| 方正县| 凤阳县| 平谷区| 武汉市| 辽中县| 洪江市| 阿巴嘎旗| 松潘县| 太湖县| 弥渡县| 辽中县| 富平县| 虹口区| 临沭县| 美姑县| 鄂温| 屏东县| 准格尔旗| 邵阳市| 密云县| 曲松县| 延边| 商南县| 浏阳市| 永安市| 河津市| 忻州市|