池化技術(執行緒池 連線池 記憶體池等)

2021-07-03 09:02:41 字數 1909 閱讀 5424

一、池化技術

- 簡單點來說,就是提前儲存大量的資源,以備不時之需。

對於執行緒,記憶體,oracle的連線物件等等,這些都是資源,程式中當你建立乙個執行緒或者在堆上申請一塊記憶體時,都涉及到很多系統呼叫,也是非常消耗cpu的,如果你的程式需要很多類似的工作執行緒或者需要頻繁的申請釋放小塊記憶體,如果沒有在這方面進行優化,那很有可能這部分**將會成為影響你整個程式效能的瓶頸。

池化技術主要有執行緒池,記憶體池,連線池,物件池等等,

物件池就是提前建立很多物件,將用過的物件儲存起來,等下一次需要這種物件的時候,再拿出來重複使用

(1)執行緒池

執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下:

先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠狀態。

可能你也許會問:為什麼要搞得這麼麻煩,如果每當客戶端有新的請求時,我就建立乙個新的執行緒不就完了?這也許是個不錯的方法,因為它能使得你編寫**相對容易一些,但你卻忽略了乙個重要的問題??效能!

乙個省級資料大集中的銀行網路中心,高峰期每秒的客戶端請求併發數超過100,如果為每個客戶端請求建立乙個新執行緒的話,那耗費的cpu時間和記憶體將是驚人的,如果採用乙個擁有200個執行緒的執行緒池,那將會節約大量的的系統資源,使得更多的cpu時間和記憶體用來處理實際的商業應用,而不是頻繁的執行緒建立與銷毀。

(2)記憶體池

如何更好的管理在應用程式中記憶體的使用,同時提高記憶體使用的效率,這是值得每乙個開發人員深思的問題。記憶體池(memory pool)提供了一種比較可行的解決方案。首先是建立記憶體池。這個過程的主要任務是預先分配足夠大的記憶體,形成乙個初步的「記憶體池」。分配記憶體,也就是使用者請求記憶體時,會返回記憶體池中一塊空閒的記憶體,並將其標誌置為已使用,當然具體細節和方法有很多。釋放記憶體時,不是真正地呼叫free或是delete的過程,而是把內存放回記憶體池的過程。在把記憶體放入記憶體池的同時,要把標誌位置為空閒。最後在應用程式結束時,要把記憶體池銷毀。這裡主要做的工作就是把記憶體池中的每一塊記憶體釋放。

使用記憶體池的好處: 1

、減少了記憶體碎片的產生。這個可以從建立記憶體池的過程中看出。我們在建立記憶體池時,分配的都是一塊塊比較整的記憶體塊,這樣可以減少記憶體碎片的產生。

2、提高了記憶體的使用效率。這個可以從分配記憶體和釋放記憶體的過程中看出。每次的分配與釋放並不是去呼叫系統提供的函式或是操作符去操作實際的記憶體,而是在復用記憶體池中的記憶體。

缺點:就是很有可能會造成記憶體的浪費,原因也很明顯,開始分配了一大塊記憶體,不是全部都用得到的。

(3)資料庫連線池

連線池比較典型的有oracle的連線池。

資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。 乙個資料庫連線物件均對應乙個物理資料庫連線,每次操作都開啟乙個物理連線,使用完都關閉連線,這樣造成系統的 效能低下。

資料庫連線池的解決方案是在應用程式啟動時建立足夠的資料庫連線,並講這些連線組成乙個連線池(簡單說:在乙個「池」裡放了好多半成品的資料庫聯接物件),由應用程式動態地對池中的連線進行申請、使用和釋放。對於多於連線池中連線數的併發請求,應該在請求佇列中排隊等待。並且應用程式可以根據池中連線的使用率,動態增加或減少池中的連線數。

連線池技術盡可能多地重用了消耗記憶體地資源,大大節省了記憶體,提高了伺服器地服務效率,能夠支援更多的客戶服務。通過使用連線池,將大大提高程式執行效率,同時,我們可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。

1)最小連線數是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費;

2)最大連線數是連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。

圖例:

執行緒池 資料庫連線池 記憶體池

網上找了寫資料 資料庫連線池 資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。執行緒池 sql server 維護乙個作業系統執行緒池,以便執行從客戶端送達的成批 sql 語句。在 microsoft windows nt?上,如果伺服器的 lightweig...

程序池 執行緒池 記憶體池

程式進化過程 單程序 多執行緒 執行緒池 多程序 程序池 單程序 程式執行正確進一步優化 多執行緒 cpu有限 並行執行的執行緒有限 多程序 改變了限制條件 程序組執行時間取決於最長的乙個程序執行的時間 程序池 我們先準備10個程序池,說白了就是10個空位子而已,乙個乙個察看,如果位置空了,那麼就在...

連線池,執行緒池 概念

資料庫連線池 引數介紹 name 表示你的連線池的名稱也就是你要訪問連線池的位址 auth 是連線池管理權屬性,container表示容器管理 type 是物件的型別 driverclassname 是資料庫驅動的名稱 url 是資料庫的位址 username 是登陸資料庫的使用者名稱 passwo...