2010-07-24 201 views
4

對象池和連接池的確切區別是什麼?他們的算法利用內存有什麼不同嗎?msdn說:「對象池可以讓你控制你使用的連接數量,而不是連接池,你可以控制達到的最大數量。」 這究竟是什麼意思?對象池vs連接池

請幫我澄清一下。

+0

什麼平臺?什麼語言? – Oded 2010-07-24 08:14:28

回答

3

連接池是一個包含連接對象的對象池。

「對象池可以控制您使用的連接數量,而不是連接池,您可以控制達到的最大數量。」

對象池允許應用程序限制任何時候使用的實例的數量。如果應用程序需要比限制更多的實例,則對象池必須決定如何處理該問題。有許多可能的策略:

  • 返回NULL
  • 拋出一個異常
  • 塊,直到一個實例可用
  • 增加池

的大小連接池是一個對象池,所以它具有完全相同的決定。

對象池(或連接池)的特定實現可以使用這些策略中的任何一種,或者組合使用其中的幾種。

在我看來,引用的聲明是誤導性的,除非它正在討論具體的實現。

簡單對象池示例

池具有一定的配置參數。一個簡單的池可能有一個minimum_size和一個maximum_size。當池第一次可用時,它將包含minimum_size對象。當客戶端詢問這些對象時,該池將包含更少的未分配對象。當客戶端將對象返回到池時,此數字也會增加。

在某些時候,池可能達到沒有未分配對象的狀態,但是一個或多個客戶端請求一個對象。此時,只要池未達到maximum_size,它就可以創建一些新對象並將它們添加到池中。它現在可以將對象返回給客戶端。

如果池已經達到maximum_size,它不能增加池的大小,所以它必須以不同的方式處理客戶端 - 假設它拋出ObjectPoolExhausted異常。稍後,一些客戶端將對象返回到池中,並且它可以像往常一樣繼續,直到它再次用完對象爲止。

回到問題

MSDN文章中說,它的特定對象池的實現將增加池的大小達到規定的最大。當達到最大值時,與上面的例子不同,它不會拋出異常,而是讓客戶端等待,直到對象返回到池中,然後將新返回的對象提供給等待的客戶端。

MSDN文章稱其特定的連接池實現沒有最大大小參數 - 它將不斷創建新的連接以滿足需求(最終它會觸及一些系統限制,並且請求會以某種方式失敗,指定)。

+0

感謝您的回答Richj.I我仍然感到困惑。msdn中的另一個聲明說:「當使用連接池時,創建在同一個線程中,因此如果池中沒有任何東西,則代表您創建一個連接。 ,池可以創建一個新的對象,但是如果你已經達到了最大值,它會給你下一個可用的對象,這是一個關鍵的行爲,當它需要很長時間來創建一個對象時,長。「 Richj如果你曾經實施過這些,你可以告訴他們究竟有何不同。 – Ritu 2010-07-24 09:08:12

+0

Hi Ritu。請將鏈接發佈到MSDN文章。我認爲它是在談論具體的實現。在一般情況下應用於對象和連接池時,這些語句不正確。 – richj 2010-07-24 09:28:56

+0

感謝您的回覆,MSDN鏈接是http://msdn.microsoft.com/en-us/library/ff7105zk%28VS.80%29.aspx – Ritu 2010-07-24 09:34:43