日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并发数据结构-1.1.2 阻塞技术

發布時間:2025/3/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并发数据结构-1.1.2 阻塞技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接,譯文鏈接,譯者:周可人,校對:梁海艦

1.1.2 阻塞技術

在很多數據結構中,內存競爭所帶來的不良現象和前文所說的順序瓶頸帶來的影響都可以通過使用細粒度鎖機制來減小。在細粒度鎖機制中,我們用多個粒度較小的鎖來保護數據結構中的不同部分。這樣做的目的是允許并發操作在它們不訪問數據結構的相同部分時并行執行。這種方法也可以用于避免獨立內存位置訪問的額外競爭。在一些數據結構中,這種現象經常發生;舉個例子,在哈希表中,對那些被哈希到不同哈希桶中的值的操作自然訪問的是數據結構中的一部分。

對其他的數據結構,如基于鎖的共享計數器,怎樣減少競爭和降低順序瓶頸并沒有那么清晰,因為抽象地來說,所有的操作都對數據結構的同一部分做修改。一種處理競爭的方法是將所有操作分散在不同時間,從而使每一個操作在不同的時段訪問計數器。一種廣泛使用的處理技術被稱為回退。然而,即使減少了競爭,我們的基于鎖的計數器仍然缺少并行性,并且不可擴展。幸運的是,更加細致的技術可以提升可擴展性。

一種技術,被稱為合并樹,可以用來實現一個可擴展的計數器。這種技術使用了一個二叉樹,每個葉子表示一個線程。樹的根節點存儲實際的計數器值,樹的其他內部節點用來協調對根節點的訪問。其中的核心思想是線程從樹的葉子節點向上爬,嘗試去和其他并發操作合并。每一次兩個線程的操作在一個內部節點合并,其中一個線程(失敗者),簡單地在當前節點等待,直到一個返回值傳遞給它。另外一個線程(勝利者),朝著根節點向上,攜帶所有在該節點子樹中合并的操作之和;一個到達根節點的勝利者線程將它的和增加到計數器中,因此所有合并的操作增長被加到計數器中。之后這個勝利者在樹中下降,分發一個返回值給每一個之前合并的,處在等待狀態的失敗者線程。這些返回值被分發下來,這樣的效果就好像所有增長操作都在根計數器被修改的時刻一個接著一個的執行。

在合并樹中,失敗者在等待勝利者時所使用的技術對性能而言是重要的。一個失敗者采用重復地讀取一個樹節點的一個內存地址的方式操作等待,這被稱為自旋。在緩存一致性多核處理器中,一個重要的推論是這個位置會位于運行失敗者操作的處理器的本地緩存,直到勝利者操作報告結果。這意味著等待的失敗者并沒有產生任何不必要的,并且可能降低勝利者性能的內存流量。這種等待被稱為本地自旋,且已經被證實對提升可擴展性來說至關重要。

在所謂的非一致性內存訪問(NUMA)架構中,處理器訪問他們的共享存儲中本地存儲部分要比訪問其他處理器的部分要快的多。在這樣的架構中,數據布局——合并樹中節點在內存中的分布方式——對性能有著顯著的影響。將樹的葉子節點存放在處理相應線程的處理器附近可以提升性能。(我們假設線程是和處理器靜態綁定的)

數據布局的問題也對緩存一致性多核處理器上并發數據結構的設計有影響。回顧合并樹的一個作用是減少獨立內存位置的競爭,從而提升性能。然而,因為緩存一致性多核處理器用緩存行大小的塊管理內存,如果兩個線程訪問不同內存區域,落在了相同的緩存行中,會和他們訪問同一塊內存地址一樣受到性能影響。這種現象被稱為偽共享,這是一個常見的,令人困惑的性能問題。

在減少獨立內存位置的競爭,用本地自旋減少內存流量,允許操作并行執行之后,用合并樹實現的,隨著并發線程的數量擴展的計數器,比單鎖版本的計數器要好的多。如果所有線程被用于不斷合并,那么一個P寬度的樹允許P個線程在O(logP)個(合并樹中的)上升和下降的操作之后,返回P個值,提供了O(P/logP)的加速比。

盡管使用合并樹的方式有很多優點,但是它也有一些不足之處。合并樹需要限定P個線程訪問計數器,并且需要O(P)的空間。雖然它在高負載下能提供更高的吞吐量,即在樹被大量線程訪問時,但它在低負載訪問時的最好性能是差的:它必須遍歷樹中的O(logP)個節點,然而一個基于單鎖的fetch-and-inc操作在常數時間內可以完成。此外,如果一個線程因為它在一個勝利者線程離開樹向上后馬上到達導致合并失敗,那么它必須等待,直到勝利者返回才能繼續向上。如果上升的勝利者,失敗者,以及之后的上升線程之間的協調處理錯誤,那么可能會導致死鎖:線程可能以循環的方式互相阻塞,沒有一個可以繼續執行。避免死鎖顯著地增加了設計正確,并且高效的阻塞并發數據結構的復雜性。

總的來說,如果在使用足夠的阻塞來達到正確,和盡量降低阻塞來允許并發操作并行執行之間達到平衡,阻塞數據結構可以提供強大的,高效的實現。

文章轉自?并發編程網-ifeve.com

總結

以上是生活随笔為你收集整理的并发数据结构-1.1.2 阻塞技术的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。