[發明專利]一種多線程下的內存管理方法在審
| 申請號: | 201410508410.7 | 申請日: | 2014-09-28 |
| 公開(公告)號: | CN104881324A | 公開(公告)日: | 2015-09-02 |
| 發明(設計)人: | 孫一桉;李凱斌 | 申請(專利權)人: | 北京匡恩網絡科技有限責任公司 |
| 主分類號: | G06F9/50 | 分類號: | G06F9/50 |
| 代理公司: | 北京連和連知識產權代理有限公司 11278 | 代理人: | 武碩 |
| 地址: | 102209 北京市昌平區*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 多線程 內存 管理 方法 | ||
技術領域
本發明涉及計算機技術領域,尤其涉及一種多線程下的內存管理方法。
背景技術
出于對安全和效率的考慮,許多應用程序并不使用操作系統提供的內存管理,而是使用自身所具有的內存管理功能。對于多線程的應用程序,當多個線程同時訪問同一資源時,必須采用合理的機制,例如互斥鎖、信號量等,來避免線程之間發生沖突。
在多線程運行狀況下進行內存管理時,程序經常面臨一種矛盾,即當多個線程通過互斥鎖訪問內存隊列時,經常會有線程處于暫停狀態,一直要等待其它線程釋放互斥鎖,該線程拿到內存隊列的訪問權,才能繼續運行。
從實踐經驗中看,當程序新開始處理一個事務時,多個線程都會申請新的內存。當事務處理完成時,各個線程又都在釋放使用完成的內存。此時對于內存分配、釋放的資源沖突將會頻繁發生,常常會有線程被迫暫停,大大降低了程序的運行效率。
發明內容
本發明的目的是為了解決多線程下的內存管理中,多個線程通過同一套互斥鎖訪問內存隊列而存在的效率低下問題。
為了解決此問題并實現發明目的,本發明提供了一種多線程下的內存管理方法,其技術方案如下:
一種多線程下的內存管理方法,向每個線程分配獨立內存池,所述內存池分配包括三個部分:申請內存隊列、釋放內存隊列以及該隊列的互斥鎖,每塊內存內嵌內存池標識,所述內存管理方法包括內存隊列初始化、內存申請、內存釋放以及釋放內存隊列的回收。
進一步地,內存申請過程分為以下步驟:步驟a1,查看本線程的申請內存隊列是否有足夠的內存,足夠則直接分配;步驟a2,如果步驟a1中內存不足,則將釋放內存隊列中的內存塊放回申請內存隊列;步驟a3,檢查釋放內存隊列中是否有內存塊;步驟a4,如果步驟a3中釋放內存隊列中有內存塊,如果有,則進行隊列合并操作。
進一步地,內存釋放過程分為以下步驟:步驟b1,確定待釋放內存塊是否屬于本線程內申請的,是則直接執行合并操作;步驟b2,如果步驟b1中待釋放內存塊不屬于本線程內申請的,則獲取本線程互斥鎖;步驟b3,執行合并操作;步驟b4,釋放互斥鎖。
進一步地,每個線程的申請內存隊列為本線程專用。
進一步地,釋放內存隊列可以由多個線程使用,所述釋放內存隊列由互斥鎖提供保護。
本發明所取得的有益效果為:
1.將傳統內存管理方法中多個線程申請一個互斥鎖變為對多套互斥鎖的申請,大大分散了資源訪問的目標,原先對于一個互斥鎖的競爭,分散為對多個互斥鎖的請求。從理論上講,如果有N個線程,則對每個互斥鎖的訪問次數只有原先的N分之一,從而有效降低了資源沖突的頻率。
2.將內存隊列被拆分為申請、釋放兩個隊列。申請內存隊列僅由本線程使用,不存在資源沖突,僅在多個線程訪問釋放隊列時有可能產生沖突,大大降低了沖突頻率。
附圖說明
圖1為本發明的多線程內存管理方法的內存管理示意圖;
圖2為本發明的多線程內存管理方法的內存申請流程圖;
圖3為本發明的多線程內存管理方法的內存釋放流程圖。
具體實施方式
下面結合附圖以及具體實施例,對本發明的內容進行進一步的闡釋。
圖1所示為本發明的內存管理方式,程序運行時可以包括N個線程,N個線程中的每個都有自己的兩個內存隊列:一個申請內存隊列,一個釋放內存隊列并且每個線程都有專屬該線程的互斥鎖。每個線程僅可以從本線程的申請內存隊列中申請和釋放內存。在程序運行過程中,線程1申請到的內存可以被傳遞到線程2。當線程2使用完該內存后,必須將此內存釋放回線程1的申請內存隊列。否則,就會導致線程1的申請內存隊列越來越小,最終全部用光,線程1無法再繼續工作。
此外,每個線程的互斥鎖僅用于釋放內存隊列。當線程申請內存時,無需檢查互斥鎖的狀態,可以直接從申請內存隊列中取用內存塊,因為線程的申請內存隊列只專屬于本線程使用,不存在資源沖突問題。
當線程釋放內存時,如果是其它線程的內存,則必須檢查互斥鎖,因為在此同時,別的進程可能也會釋放內存到這個釋放內存隊列。為了防止資源沖突,每次釋放其它線程的內存之前,必須檢查相應的互斥鎖狀態。
在對多線程下的內存進行管理時,先將內存隊列進行初始化,在初始化時,所有內存塊都保存在申請內存隊列中,釋放內存隊列為空。
如圖2所示,在進行內存申請操作時,首先查看本線程的申請內存隊列狀態。檢查此隊列中使用和剩余的內存塊是否還有20%沒有分配出去。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京匡恩網絡科技有限責任公司,未經北京匡恩網絡科技有限責任公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410508410.7/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種存儲系統及其使用的方法
- 下一篇:一種可伸縮的生成文本的方法





