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è)置為保留10,B類任務(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ù)線程池或者資源池。