[發明專利]高爭用環境下的細粒度鎖設計方法在審
| 申請號: | 201910532372.1 | 申請日: | 2019-06-19 |
| 公開(公告)號: | CN110413260A | 公開(公告)日: | 2019-11-05 |
| 發明(設計)人: | 張舉武 | 申請(專利權)人: | 四川長虹電器股份有限公司 |
| 主分類號: | G06F8/20 | 分類號: | G06F8/20 |
| 代理公司: | 成都虹橋專利事務所(普通合伙) 51124 | 代理人: | 郝迎賓 |
| 地址: | 621000 四*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 爭用 細粒度 集合 存儲 引用 原語 技術方案要點 獨立線程 環境提供 死鎖檢測 提升性能 同步操作 定位鎖 最大化 創建 分段 喚醒 保存 淘汰 優化 維護 | ||
本發明提出一種高爭用環境下的細粒度鎖設計方法,屬于高爭用環境下的細粒度鎖設計領域。本發明技術方案要點為:采用Java原語實現基礎鎖機制;進行Key存儲;對Key進行hash分段;維護兩個集合分別來存儲強引用鎖和弱引用鎖;對集合大小進行限制,并采用LRU算法進行淘汰;計算hash值,未在segment中找到時,創建鎖,保存hash值到segment,集合中存入該鎖,然后執行同步操作;先定位鎖,然后執行喚醒操作;創建獨立線程進行死鎖檢測。本發明針對高爭用環境提供了一種粒度更細,性能更高的優化方案,盡可能地讓爭用的情況減少到最低,進而最大化提升性能。
技術領域
本發明涉及計算機軟件編程應用技術,特別涉及高爭用環境下的細粒度鎖設計方法的技 術。
背景技術
在開發多線程應用程序中,各個線程之間由于要共享資源,必須用到鎖機制。
就拿Java來說,幾乎每一個Java開發人員都認識synchronized,使用它來實現多線程 的同步操作是非常簡單的,只要在需要同步的對方的方法、類或代碼塊中加入該關鍵字,它 能夠保證在同一個時刻最多只有一個線程執行同一個對象的同步代碼,可保證修飾的代碼在 執行過程中不會被其他線程干擾。使用synchronized修飾的代碼具有原子性和可見性,在需 要進程同步的程序中使用的頻率非常高,可以滿足一般的進程同步要求。
另外還有常見ReentrantLock、Semaphore、AtomicInteger等。每種機制都有優缺點與 各自的適用場景。但其粒度都太大,同一時刻只有一個線程能進入同步塊,這對于某些高并 發的場景并不適用。比如銀行客戶a向b轉賬,c向d轉賬,假如這兩個線程并發,代碼其 實不需要同步。但是同時有線程3,e向b轉賬,那么對b而言必須加入同步。
這時需要考慮鎖的粒度問題,即細粒度鎖,盡可能地讓爭用的情況減少到最低,進而最 大化提升性能。
發明內容
本發明的目的是提供一種粒度更細,性能更高的高爭用環境下的細粒度鎖設計方法。
本發明解決其技術問題,采用的技術方案是:高爭用環境下的細粒度鎖設計方法,包括 如下步驟:
步驟1、采用Java原語實現基礎鎖機制;
步驟2、進行Key存儲;
步驟3、對Key進行hash分段;
步驟4、維護兩個集合分別來存儲強引用鎖和弱引用鎖;
步驟5、對集合大小進行限制,并采用LRU算法進行淘汰;
步驟6、計算hash值,未在segment中找到時,創建鎖,保存hash值到segment,集合中存入該鎖,然后執行同步操作;
步驟7、先定位鎖,然后執行喚醒操作;
步驟8、創建獨立線程進行死鎖檢測。
具體的是,步驟2中,使用Memory或Cache或DataBase或FileSystem進行Key存儲。
進一步的是,步驟3具體包括如下步驟:
步驟301、實現Lock類增加入參調整鎖分段粒度以及鎖引用類型;
步驟302、維護一個segment容器來存放存儲對象的hash值,和鎖對象的存儲下標;
步驟303、根據傳入的粒度來調整hash mask,進而調整分段的大小實現hash分段。
具體的是,步驟303中,所述傳入的粒度范圍為1~100。
進一步的是,步驟5具體包括如下步驟:
步驟501、Key第一次被訪問,加入到訪問歷史列表;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于四川長虹電器股份有限公司,未經四川長虹電器股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910532372.1/2.html,轉載請聲明來源鉆瓜專利網。





