5
、執行緒關聯記憶體池再提速
上一節已經提到問題,解決辦法是這樣的
struct tm_bufunit;
};static void *tm_malloc(size_t size, size_t *osize=null)
returnnull; }
看上面的**應該很容易明白,就是將由該池
malloc
的記憶體塊也打上統一的標記,這樣由該池分配的任何記憶體塊都可用最簡單的判斷釋放,省去了查詢執行緒查詢目標池的兩次查詢,不光提速了而且解決了上一節提到的那個
bug。
最終實現的執行緒關聯記憶體池通用分配函式
tm_new
大概相當於
malloc 15
倍左右的速度,定位到
pool
之後的newobj
相當於malloc 45
倍左右的速度。通用函式大致相當於
nedmalloc
速度的2.6-3
倍,直接定位到
pool
的分配速度大概相當於
dlmalloc 的2
倍。關於執行緒關聯的記憶體池還有一些細節問題我沒有展開討論,如
free
表是每個執行緒保留乙份還是全域性保留乙份,如果是全域性保留乙份則涉及到復用的時候如何分配,還有就是
tls系列函式我看
nedmalloc
也在用,我第一版也在用,但後來實測發現這些函式貌似效率不高,後面的版本沒有採用
tls系列函式。
關於執行緒關聯的記憶體池我寫了
5個版本,當然最重要的還是第乙個版本,後面的版本除了這一節提到的重要改進之外變化不是很大,最後的第五版增了一些和我的私有
lib相關的功能。
以前寫文章太少,總是看別人的文章,在網路時代覺得自己挺自私,這次一鼓作氣,一口氣寫了出來,可能寫得很粗略,不知道有多少人能看明白,如能給讀者一點啟示我將感到很欣慰。
記憶體池 執行緒池
1 記憶體池是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠再繼續申請新的記憶體。這樣做的乙個顯著優點是,使得記憶體分配效率得到提公升。2 執行緒池是一種多執行緒處理形式,處理過程中將任務新...
記憶體池,程序池,執行緒池
在使用new malloc在堆區申請一塊記憶體的時候,由於每次申請的記憶體大小不一樣就會產生很多記憶體碎片,不好管理和浪費。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的 大小相等的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠用再 繼續申請新的記憶...
記憶體池 執行緒池 程序池
由於伺服器的硬體資源 充裕 那麼提高伺服器效能的乙個很直接的方法就是以空間換時間,即 浪費 伺服器的硬體資源,以換取其執行效率。這就是池的概念。池是一組資源的集合,這組資源在伺服器啟動之初就完全被建立並初始化,這稱為靜態資源分配。當伺服器進入正式執行階段,即開始處理客戶請求的時候,如果它需要相關的資...