[發明專利]一種實現并發容器的方法和裝置有效
| 申請號: | 201710261006.8 | 申請日: | 2017-04-20 |
| 公開(公告)號: | CN108733361B | 公開(公告)日: | 2022-03-04 |
| 發明(設計)人: | 張志維 | 申請(專利權)人: | 北京京東尚科信息技術有限公司;北京京東世紀貿易有限公司 |
| 主分類號: | G06F8/30 | 分類號: | G06F8/30;G06F9/52 |
| 代理公司: | 中原信達知識產權代理有限責任公司 11219 | 代理人: | 張一軍;姜勁 |
| 地址: | 100195 北京市海淀區杏石口路6*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 實現 并發 容器 方法 裝置 | ||
本發明提供一種實現并發容器的方法和裝置,有助于通過增加子容器的方式,而在內存上物理隔離數據,從而減少了由于輪詢容器鎖而引起的CPU消耗。該方法的特征在于,該并發容器是由多個子容器組成的父容器,按如下步驟對該父容器進行創建:向該父容器中的一個子容器添加數據,并記錄所添加的數據在該父容器中的序號,當所添加的數據的量達到第一閾值時,在內存中創建一個新的子容器;以及繼續向所創建的新的子容器中添加數據,并記錄所添加的數據在該父容器中的序號,當所添加的數據的量達到第一閾值時,在內存中再次創建另一新的子容器;以此類推,直至所有數據被添加至父容器為止,其中子容器在內存中彼此物理隔離。
技術領域
本發明涉及計算機技術領域,尤其涉及一種實現并發容器的方法和裝置。
背景技術
在編寫程序的時常常需要對大量的對象引用進行管理。為了實現有效的歸類管理,將同類的引用放置在同一數據容器中。例如,JAVA容器是JAVA API(ApplicationProgramming Interface,應用程序接口)所提供的一系列類的實例,用于在程序中存放對象,可以被理解為存放數據的集合。由于在數據容器中存放了隨時可能被使用的對象引用,所以一般的數據容器均提供查詢、遍歷、修改等基本接口功能。
JAVA容器分為同步容器和并發容器。同步容器包括Vector,Hashtable等。在使用同步容器的情況下,同步容器通過封裝線程的狀態來實現線程安全,即當線程嘗試對容器中的數據進行操作時,需要占據該容器的鎖,以防止其他線程影響數據。如果多個線程調用同步容器,則這些線程將會通過搶占容器的獨占鎖來串行執行對同步容器的調用,從而降低了并發性。當多個線程競爭容器的獨占鎖時,吞吐量嚴重下降。所以在需要支持線程并發的環境中,可以考慮使用并發容器來替代同步容器。并發容器是針對多個線程并發訪問容器而設計的,并發容器包括ConcurrentHashMap,CopyOnWriteArrayList等。并發容器使用了與同步容器完全不同的加鎖策略來提供更高的并發性和伸縮性,例如在ConcurrentHashMap中采用了一種粒度更細的加鎖機制,可以稱為分段鎖,在這種鎖機制下,允許任意數量的讀操作線程并發地訪問容器,并且讀操作線程和寫操作線程也可以并發的訪問容器,同時允許一定數量的寫操作線程并發地修改容器,所以并發容器可以在并發環境下實現更高的吞吐量。
在實現本發明過程中,發明人發現現有技術中至少存在如下問題:在目前的編程過程中,為避免并發操作某個集合導致數據一致性的差異(例如:集合中一個數據同時被多個線程修改,則無法確定哪個線程最后修改的該條數據),通常采用支持并發操作的集合(例如:CopyOnWriteArrayList等)。在日常使用容器過程中經常會遇到這樣一個場景:多個線程同時往一個支持并發操作的容器中寫入數據,一個線程從該容器中隨機讀取數據進行處理。此時多個線程搶奪該容器的同步鎖,搶到鎖的線程對數據進行修改或者讀取,未搶到鎖的線程此時一直等待獲得同步鎖。此時大量的CPU資源消耗在了等待獲得同步鎖的過程中,造成處理性能隨著容器中數據量的增加而降低。雖然并發容器CopyOnWriteArrayList的性能已經優于同步容器Vector,但在實際使用中,某些大并發場景仍然無法滿足需求。
圖1是現有技術中同步容器的流程圖。以向同步容器中添加數據為例:在步驟S101中,一個線程開始嘗試操作數據;在步驟S12中,該線程請求同步容器的獨占鎖;如果在S102中該線程未能成功獲得容器的獨占鎖,則進入步驟S103,該線程循環請求鎖,直至獲得該容器的獨占鎖;如果在S102中該線程成功獲得容器的獨占鎖,則進入步驟S104,該線程對數據進行操作;接下來,在步驟S105中,在該線程完成數據操作后,釋放所占據的獨占鎖;至此,完成向同步容器中添加數據的操作。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京京東尚科信息技術有限公司;北京京東世紀貿易有限公司,未經北京京東尚科信息技術有限公司;北京京東世紀貿易有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710261006.8/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:指紋識別算法固化硬件函數
- 下一篇:一種數據質量檢驗方法和裝置





