資源池
2011 年 3 月 29 日
許多程式需要使用建立和維護成本昂貴的資源。資料庫連線和執行緒就是範例。資源池提供管理這些資源的良好方法。
當客戶端需要使用資料庫連線時,它會要求池提供連線,而不是自己建立連線。客戶端使用完連線後,會將連線歸還給池。池通常會在啟動時建立大量連線。池的大小通常可以透過組態控制設定,並可以根據客戶端的需求量和維護資源的成本進行調整。
當所有資源都在使用中,而客戶端要求新的資源時,會有幾種不同的回應。一種是擲回例外,另一種是讓客戶端等到有資源可用。如果可能,通常最好的回應是透過建立更多連線來擴充池。這樣一來,池可以設定為較低的初始大小,並會根據需要擴充。如果您這樣做,您可能需要一個機制來查看是否有許多資源處於閒置狀態,然後在資源難以保留時縮小池。即使有動態擴充,您可能仍需要對池的大小設定一些限制,在達到限制時,您不希望池再擴充。
您在使用資源池時經常會遇到的問題是客戶端沒有歸還資源,這是一種資源外洩。解決這個問題的好方法是在測試期間將池的限制設定為 1,並將池組態為在達到限制時要求資源會擲回例外。這樣可以更輕鬆地找出外洩的客戶端。
有關資源池的更多資訊,一個很好的來源是 POSA 3 中的池模式。