執行緒關聯記憶體池再提速

2021-05-21 18:54:56 字數 956 閱讀 9391

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在堆區申請一塊記憶體的時候,由於每次申請的記憶體大小不一樣就會產生很多記憶體碎片,不好管理和浪費。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的 大小相等的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊不夠用再 繼續申請新的記憶...

記憶體池 執行緒池 程序池

由於伺服器的硬體資源 充裕 那麼提高伺服器效能的乙個很直接的方法就是以空間換時間,即 浪費 伺服器的硬體資源,以換取其執行效率。這就是池的概念。池是一組資源的集合,這組資源在伺服器啟動之初就完全被建立並初始化,這稱為靜態資源分配。當伺服器進入正式執行階段,即開始處理客戶請求的時候,如果它需要相關的資...