dubbo中的執行緒池

2022-05-04 17:45:16 字數 1776 閱讀 3914

dubbo提供了四種執行緒池。其實我理解還是還是根據threadpoolexecutor這個jdk提供的執行緒池類,只不過適應性的改變了其中的引數。dubbo分別提供了1. 快取執行緒池 2。固定大小執行緒池 3. 上屆執行緒池 4.定時執行緒池。下面具體的說一說這些執行緒池。

1. 公共行為

首先這些執行緒池類均繼承了threadpool介面。該介面中的定義了getexecutor

/**

* thread pool

* * @param url url contains thread parameter

* @return thread pool

*/@adaptive()

executor getexecutor(url url); // 實際上還是對jdkexcutor的封裝

可以看到其返回值還是executor。並且需要採用什麼樣的執行緒池,可以從url中進行設定。

2. cachedthreadpool

public class cachedthreadpool implements threadpool 

}

從原始碼中可以看到,將佇列設定為同步佇列,只要沒有沒有達到threads的數量,就會一直增加執行緒。

3.fixedthreadpool

public class fixedthreadpool implements threadpool 

}

固定大小執行緒池,顧名思義就是執行緒池中的執行緒數量維持著固定大小。其原理就是將其中的佇列設定為同步佇列,同時將最大池和核心池的數量都設定為一致就行。

4. limitedthreadpool

public class limitedthreadpool implements threadpool 

}

顧名思義,可擴張執行緒池就是通過上屆佇列儲存任務。

4.eagerthreadpoolexecutor

public class eagerthreadpoolexecutor extends threadpoolexecutor 

/*** @return current tasks which are executed

*/public int getsubmittedtaskcount()

@override

protected void afterexecute(runnable r, throwable t)

@override

public void execute(runnable command)

// do not increment in method beforeexecute!

submittedtaskcount.incrementandget();

try catch (rejectedexecutionexception rx)

} catch (interruptedexception x)

} catch (throwable t)

}}

這個池子的比較不同的是:還是通過threadpoolexecutor實現任務的管理,唯一不同的是當任務執行失敗的時候,會將任務儲存到自定義的taskqueue中。同時維持這乙個當前池子的任務的計數。

執行緒池中的所有核心執行緒都在忙碌時,此時如果再新增新的任務不會放入阻塞佇列,而且建立新的執行緒,直到達到最大執行緒限制,此時如果還有任務,才會放入阻塞佇列。

Dubbo 執行緒池調優實戰分析

dubbo的服務提供者端一共包含了兩類執行緒池,一類叫做io執行緒池,還有一類叫做業務執行緒池,它們各自有著自己的分工,如下圖所示 all 將請求全部交給業務執行緒池處理 這裡面除了日常的消費者進行服務呼叫之外,還有關於服務的心跳校驗,連線事件,斷開服務,響應資料寫回等 execution 會將請求...

6 Dubbo執行緒模型與執行緒池策略

當我們聊dubbo執行緒模型 執行緒池策略的時候,我們應該考慮哪些問題?根據請求的訊息類被io執行緒處理還是被業務執行緒池處理,dubbo提供了下面幾種執行緒模型 alldispatcher原始碼剖析 all執行緒模型的實現如下 default thread pool configure publi...

Java中的執行緒池

降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。提高執行緒的可管理性。使用執行緒池可以進行統一分配 調優和監控。判斷工作佇列是否已經滿。判斷執行緒池的執行緒是否已滿。總結 執行緒池的主要流程圖 如果當前執行...