[發明專利]一種基于共享內存的內存碎片分配方法和裝置在審
| 申請號: | 201410401240.2 | 申請日: | 2014-08-14 |
| 公開(公告)號: | CN104199781A | 公開(公告)日: | 2014-12-10 |
| 發明(設計)人: | 熊劍 | 申請(專利權)人: | 深圳百科信息技術有限公司 |
| 主分類號: | G06F12/02 | 分類號: | G06F12/02 |
| 代理公司: | 無 | 代理人: | 無 |
| 地址: | 518057 廣東省深圳市南山*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 共享 內存 碎片 分配 方法 裝置 | ||
技術領域
本發明涉及移動互聯網內存管理領域,尤其涉及一種基于共享內存的內存碎片分配方法和裝置。
背景技術
io事件讀寫分離即讀操作和寫操作不在同一個線程或進程。這樣可以避免其中的一個操作阻塞線程,也不會影響到另一個。
io與邏輯處理分離即io操作線程與工作線程分別在不同的線程中,這樣可以避免相互影響。
共享內存是被多個進程共享的一部分物理內存。共享內存是進程間共享數據的一種最快的方法,一個進程向共享內存區域寫入了數據,共享這個內存區域的所有進程就可以立刻看到其中的內容。
網絡IO讀寫線程與消息處理工作線程分離,能避讀寫和處理相互影響,導致一方阻塞。影響系統性能的發揮,同時分離成兩個獨立的模塊,可以根據應用特點,靈活的重組模塊,適應各種需求也便于整個系統的橫向擴展,具有很好的伸縮和擴展性。雖然目前這是一種趨勢,但是并不是說它就沒有引入一些問題。內存拷貝就是引入的一些問題中的一個。
線程與線程,進程與進程中的交互信息,源源不斷的通過各種進程中通訊的方式,相互傳遞,而這種消息的傳遞并不會立即得到處理,因而建立消息緩沖隊列是一種通用的做法。發信方從IO消息緩沖區拷貝一段數據,組成消息,通過進程中通訊方式傳送給接收方,這是第一次拷貝;受信方將收到的消息壓入消息隊列中,勢必要new一段內存,拷貝一段數據,然后插入隊列,這是第二個拷貝;受信方處理線程從消息隊列中取消息也會拷貝一段數據到處理緩沖區中等待處理,這是第三次拷貝。
進程之間的通訊需要進行多次內存拷貝,多次內存拷貝,特別是交互數據量比較大的應用,特別消耗系統資源,影響軟件系統的效率。目前高并發服務需要的并發數越來越高,提高處理能力是越來越渴望,對技術的要求會越來越苛刻。在這種背景之下,基于共享內存的消息隊列管理機制應孕而生。
發明內容
本發明實施例的目的在于提出一種基于共享內存的內存碎片分配方法,旨在解決現有技術消息傳遞與處理過程中的多次拷貝,消耗系統資源,影響軟件系統效率的問題。
本發明實施例是這樣實現的,一種基于共享內存的內存碎片分配方法,所述方法包括以下步驟:
根據待存儲消息的消息長L,從頭至尾遍歷空閑碎片鏈表,查找碎片總長大于“碎片頭長度+L”的空閑內存碎片;
判斷是否找到碎片總長大于“碎片頭長度+L”的空閑內存碎片,若沒有找到碎片總長大于“碎片頭長度+L”的空閑內存碎片,則將相鄰空閑內存碎片進行重組,返回步驟“根據待存儲消息的消息長L,從頭至尾遍歷空閑碎片鏈表,查找碎片總長大于“碎片頭長度+L”的空閑內存碎片”;
若找到碎片總長大于“碎片頭長度+L”的空閑內存碎片,則
判斷是否所述空閑內存碎片的碎片總長大于“L+兩個碎片頭長”,若是,則將所述空閑內存碎片從空閑鏈表中移除,將其分裂成兩個內存碎片,前一長度為“碎片頭長度+L”的內存碎片,在更新碎片頭結構后設為待分配內存碎片,將其插入到已用碎片鏈表的鏈尾;后一長度為“所述碎片總長-碎片頭長度-L”的內存碎片,在設置碎片頭結構后插入空閑碎片鏈表尾部;否則直接將所述空閑碎片從空閑碎片鏈表中移除,并將其插入到已用碎片鏈表尾部。
本發明實施例的另一目的在于提出一種基于共享內存的內存碎片分配裝置,所述裝置包括:
空閑碎片鏈表遍歷模塊,用于根據待存儲消息的消息長L,從頭至尾遍歷空閑碎片鏈表,查找碎片總長大于“碎片頭長度+L”的空閑內存碎片;
第一判斷模塊,用于判斷是否找到碎片總長大于“碎片頭長度+L”的空閑內存碎片,若是,則進入第二判斷模塊,否則,進入碎片重組模塊,
第二判斷模塊,用于判斷是否所述空閑內存碎片的碎片總長大于“L+兩個碎片頭長”,若是,則進入碎片分裂模塊,否則進入碎片移除及插入模塊;
碎片重組模塊,用于將相鄰空閑內存碎片進行重組,然后返回空閑碎片鏈表遍歷模塊;
碎片分裂模塊,用于將所述空閑內存碎片從空閑鏈表中移除,將其分裂成兩個內存碎片,前一長度為“碎片頭長度+L”的內存碎片,在更新碎片頭結構后設為待分配內存碎片,將其插入到已用碎片鏈表的鏈尾;后一長度為“所述碎片總長-碎片頭長度-L”的內存碎片,在設置碎片頭結構后插入空閑碎片鏈表尾部;
碎片移除及插入模塊,用于直接將所述空閑碎片從空閑碎片鏈表中移除,并將其插入到已用碎片鏈表尾部。
本發明的有益效果
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于深圳百科信息技術有限公司;,未經深圳百科信息技術有限公司;許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410401240.2/2.html,轉載請聲明來源鉆瓜專利網。





