內存池性能研究

“我從蓋茨身上學到很多有益的東西,而樹立雄心壯志是其關鍵.在這個問題上,
蓋茨將這樣說:'當你考慮某一個問題時,千萬不要從數百萬的級別去考慮它,
而是應該從數億的級別去考慮.'”

 

本文出自: 阿呆 http://blog.csdn.net/davemin

 

宣傳: VC 十年技術羣 30107096 歡迎高手加入,本羣只研究VC

 

問題: Memory pool 要求 thread safe, 導至性能降低, 如何解決這個問題?

情況A. 參看了數個memory pool 的實現, 很多是換掉了全局的申請內存的宏. 直接使用全局的memory pool 來申請和釋放內存.

情況B. 另外memory pool 多半是被服務器端使用, 而且往往是多線程,很可能是非常多的線程同時工作.
       然而,話又說回來, 線程thread safe 非內核級實現, 性能上不至於太差. 內核級的互斥對象如mutex 之類的性能就差到極限了.

情況C.  還有一個, 就是使用memory pool來分配或者是釋放內存, 也是需要時間的. 不要以爲不使用系統的HeapAlloc就會節約時間,   是的, 節約時間了,但內存池本身的大小實現機制,還是決定了其任何一個工作是需要花銷相當時間的.
   具體花銷時間的情況,我需要測試幾個memory pool的實現才能瞭解,但我事先已經測試過自己實現的內存池的工作情況.


綜上A, B, C 三種情況,

   這裏就存在一起嚴重的問題, 如果線程數較多,如果申請和釋放內存頻率比較高, 那麼會嚴重導至性能降低.
   因爲只能同時有一個線程在申請內存. 或者是刪除內存. 這個功能只能同時單線程進行.


如果我們又應用蓋茨的話: 從數億的級別去考慮 , 那麼這個事情將會變的如何呢?  重要參數: 線程數量+申請/釋放內存的頻率


宣傳: VC 十年技術羣 30107096 歡迎高手加入,本羣只研究VC


關於我是如何處理這個問題, 以及具體的性能測試數據是怎麼樣的.

留待研究與後續了.


 

發佈了60 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章