AMPS:內存管理(二)

  對於底層的內存管理,AMPS提供了另外一種優化機制,一旦使用底層的內存分配函數(如C的malloc)爲內存對象分配好一個大的buffer後,當這個內存對象銷燬時,AMPS將這個本來要ree掉buffer存儲在一個內部按內存塊大小化分的free鏈表中,這樣,當有新的內存對象需要分配時,AMPS先檢查這個鏈表中是否有滿足條件(即是否滿足所申請的大小)的內存對象,如果有,從此鏈表中獲取,從而避免了調用malloc,當這個內存對象使用完後,AMPS將這塊內存回收又掛在鏈表上,從而避免了free操作。

  注意,這種機制使用AMPS持續不斷地從向內部的free鏈表中增加底層分配的內存,在大負荷下有可能會使用內存耗盡,例如當大量的消息同時處理時。爲了避免此現象,APMS提供了一個API用於內部內存的管理,這個API在free鏈表達到指定的大小時,釋放一部分內存,這個指定大小取值爲物理內存的一定比例。當然應用程序也可以能過限制併發的消息數目來避免內存耗盡,使用這種方式時需要應用程序註冊一個AMPS的內部事件,當鏈表達到一定值時事件被觸發,從而處理即可。

  在如下圖5a中所示的內存管理對象,它包含了一個結點存儲bufffer的鏈表,並且維護了包括buffer的大小、分配的總字節數、鏈表頭指針,當前活動的buffer等。

  圖5b顯示了鏈表的一個結點,即一個buffer的內部結構,隨着每次分配,指針向buffer的底端移動。

  圖6顯示了包含不同大小鏈表的buffer cache結構。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章