• <input id="qucwm"><u id="qucwm"></u></input>
  • <menu id="qucwm"></menu>
  • <input id="qucwm"><tt id="qucwm"></tt></input>
  • <input id="qucwm"><acronym id="qucwm"></acronym></input>
  • 標簽 ‘ concurrent data structure

    非阻塞算法

    原文地址??作者:Jakob Jenkov? ?譯者:張坤

    在并發上下文中,非阻塞算法是一種允許線程在阻塞其他線程的情況下訪問共享狀態的算法。在絕大多數項目中,在算法中如果一個線程的掛起沒有導致其它的線程掛起,我們就說這個算法是非阻塞的。

    為了更好的理解阻塞算法和非阻塞算法之間的區別,我會先講解阻塞算法然后再講解非阻塞算法。

    閱讀全文

    Harris’s Linked List

    原文地址?作者:Pedro Ramalhete,譯者:葉磊,校對:周可人

    在學術論文中Harris Linked List是使用最廣泛的并發數據結構之一。

    Harris Linked List是一個基于linked-list的并發有序set(或者是map),可進行無鎖性質的插入,刪除和查找操作。

    http://research.microsoft.com/pubs/67089/2001-disc.pdf

    這篇文章最早在2001年的DISC會議上發表,作者是Tim Harris,目前在Oracle就職。

    https://labs.oracle.com/pls/apex/f?p=labs:bio:0:296

    閱讀全文

    并發數據結構-1.5 鏈表

    原文鏈接,譯文鏈接,譯者:huavben,校對:周可人

    考慮支持插入,刪除和查找操作的并發數據結構實現。如果這些操作只處理鍵值(譯者注:而不處理具體值),這樣的數據結構會是一個集合。如果一個數據值與每一個鍵關聯起來,我們就得到了一部數據字典。由于他們都是密切相關的數據結構,一個并發的集合通常能夠經過適當修改來實現一部字典。在接下來的三個小節中,我們將專注于利用linked lists,hash tables,和trees這三種不同的數據結構來實現集合。

    閱讀全文

    并發數據結構-1.4 池

    原文鏈接,譯文鏈接,譯者:huavben,校對:周可人

    實現高效并發棧和隊列的大部分挑戰來自于一個被插入的元素可以被刪除這一需求。并發池是一種支持插入和刪除操作的數據結構,它允許刪除操作移除任何一個已經被插入的,并且沒有在隨后被刪除的元素。這樣的弱需求提供了提高并發性能的機會。

    一個高效的并發池可以使用任意靜態一致的計數器來構建。在這樣的并發池中,元素被置于數組當中,fetch-and-inc操作決定插入操作在哪個位置存儲元素,同樣的,fetch-and-inc操作決定刪除操作在哪個位置獲得元素。每一個數組元素都包含了一個表示滿/空的比特位或者等效的機制,來表明在相應的位置,將要刪除的元素已經存在。在這種策略下,使用combining tree,combining funnel,counting network,diffracting tree中的任何一個技術都可以并行化共享技術器,解決這一主要的瓶頸來創建出一個高吞吐量的共享并發池。此外,一個類似棧的池可以使用一個允許增加和減少操作的計數器來實現,然后利用以上技術中的一種來并行化.
    閱讀全文

    并發數據結構-1.7 查找樹

    原文鏈接,譯文鏈接,譯者:iDestiny,校對:周可人

    任何查找樹的并發實現都可以通過用一個獨占鎖保護來完成。通過使用讀寫鎖對并發性能有一定提升,讀寫鎖允許所有只讀(查找)操作并發地執行,因為讀操作是以共享模式持有鎖,然而更新(插入或刪除)操作持有獨占模式的鎖,從而排斥其他所有操作。如果更新操作比較少,這還能接受,但是只要有適量的更新操作,那么更新操作所持有的獨占鎖將產生線性的瓶頸,從而大大降低性能。通過使用細粒度的鎖策略——比如每個節點一個鎖,而不是整棵樹使用同一個鎖——這樣我們進一步地提升了并發性能。
    閱讀全文

    并發數據結構-1.6 哈希表

    原文鏈接,譯文鏈接,譯者:iDestiny,校對:周可人

    典型可擴展的哈希表即一個可調整大小的桶數組(buckets), 每一個桶存放預期數量的元素,因此哈希表平均在常量時間內進行插入,刪除,查詢操作。哈希表調整大小的主要成本—–在于新舊桶(buckets)之間進行重新分配操作,該操作被分攤到所有表操作上,所以平均操作時間也是常量的。哈希表調整大小就是擴容,在實踐中,哈希表僅需要增加數組大小即可。

    Michael實現了一個可并發,不可擴展的哈希表(通過對哈希表中每個桶進行讀寫鎖約束)。然而,為了保證元素數量增長時的性能,哈希表必須可擴展。
    閱讀全文

    并發數據結構- 1.8 優先隊列&1.9 總結

    原文鏈接,譯文鏈接,譯者:郭振斌,校對:周可人

    1.8 優先隊列

    并發的優先隊列是一個可線性化到順序優先隊列的數據結構,能夠通過常用的優先隊列語義提供insert和delete-min操作。

    基于堆的優先隊列

    許多文獻中提到的并發優先隊列結構,其實是本書前面提到的可線性化堆結構。再一次的,這種結構的基本思想是在個別堆節點上使用細粒度鎖,使線程在并行下也能夠盡可能的訪問數據結構的不同部分。設計這種并發堆的關鍵問題,在于傳統自底向上的insert和自頂向下的delete-min操作有可能造成死鎖。Biswas和Brown[17]提出基于鎖的堆算法,通過專門的“清理”線程解決死鎖。Rao和Kumar[116]建議通過一個將insert和delete-min操作都自頂向下處理的算法[17]來解決問題。Ayani[11]在他們算法基礎上做了改善,即通過一種方式在堆兩側進行連續插入。Jones[68]提出一種基于類似斜堆的方案[116]。
    閱讀全文

    并發數據結構-1.1.4 復雜度測量&1.1.5 正確性

    原文鏈接,譯文鏈接,譯者:張軍,校對:周可人

    1.1.4 復雜度測量

    一個被廣泛研究的方向是在理想化模型,如并行隨機存取機上分析并發數據結構和算法的漸進復雜度[35, 122, 135]。然而,很少有將這些數據結構放在一個真實的多處理器上進行建模的。這里有多種原因,大部分原因跟系統硬件架構與線程異步執行的相互作用有關。想想組合樹(combining tree)的例子,雖然我們能通過計算(指令數)得到O(P/logP)的加速比,但這無法反映在實證研究中[52, 129]。真實世界的行為是被上述其他因素支配的,如競爭開銷,緩存行為,同步操作(例如CAS)開銷,請求到達率,退避延時,數據結構在內存中的布局等等。這些因素很難用一個精確的涵蓋目前所有架構的模型來量化。 閱讀全文

    并發數據結構-1.1.3 非阻塞技術

    原文鏈接,譯文鏈接,譯者:Noodles,校對:周可人

    1.1.3 非阻塞技術

    正如前面討論的那樣,非阻塞實現主要目的是為了消除由鎖帶來的相關問題,為了形式化研究這一概念,多種非阻塞演進條件已經在相關文獻有所研究了,如wait-freedom演進條件,lock-freedom演進條件,和obstruction-freedom演進條件。滿足wait-free演進條件的操作是指在執行自身包含的有限步驟之后,保證操作必須完成,而不用考慮其他操作發生的時序,滿足lock-free演進條件的操作是指在執行自身包含的有限步驟之后,保證某些操作完成。滿足obstruction-free演進條件的操作是指在不受其他操作干擾的情況下,執行它包含的有限步驟之后,保證其完成。

    閱讀全文

    并發數據結構-1.1.2 阻塞技術

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

    1.1.2 阻塞技術

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

    并發數據結構- 1.1.1 性能

    原文鏈接,譯文鏈接,譯者:俞升兵,校對:周可人

    1.1.1 性能

    一個運行在P個處理上的應用程序的加速度是它在單個處理器上的執行時間和在P個處理器的執行時間的比值。這是一種評價應用程序對于機器資源利用程度的衡量。理想情況下,我們想要的結果是線性加速度:當我們使用P個處理器的時候,我們希望可以獲得P的加速度(譯者注:例如一個應用程序在單處理器的執行時間是10秒,那么在雙處理的執行時間理想情況下是5秒)。加速度隨著P一起增加的數據結構我們稱之為可擴展的數據結構。在設計可擴展的數據結構的時候,我們必須注意:為了同步使用簡單的方法會嚴重破壞擴展性。
    閱讀全文

    并發數據結構-1.1 并發的數據結構的設計

    原文鏈接,譯文鏈接,譯者:董明鑫,校對:周可人

    隨著多個處理器共享同一內存的機器在商業上的廣泛使用,并發編程的藝術也產生了巨大的變化。當前的趨勢向著低功耗芯片級多線程(CMT)發展,所以這樣的機器一定會更加廣泛的被使用。

    共享內存多處理器是指并發的執行多個線程的系統,這些線程在共享的內存中通過數據結構通訊和同步。這些數據結構的效率對于性能是很關鍵的,而目前熟練掌握為多處理器機器設計高效數據結構這一技術的人并不多。對大多數人來說,設計并發的數據結構比設計單線程的難多了,因為并發執行的線程可能會多種方式地交錯運行他們的指令,每一種方式會帶來不同的,甚至不符合預期的輸出。這就要求設計者改變他們對運算的認識,理解新的設計方法,采用新的編程工具集。此外,設計可擴展的并發數據結構,使得當機器執行越來越多的并發線程時依舊表現良好也是新的挑戰。本文主要介紹設計并發數據結構的相關挑戰,和一些重要的數據結構相關內容的總結。我們的總結絕不是全面的;相反,我們特意選取了一些能說明設計的關鍵問題的流行的數據結構,希望我們提供了足夠的背景和知識,讓有興趣的讀者接觸那些我們沒有提到的內容。
    閱讀全文

    招募譯者翻譯并發數據結構

    什么是并發數據結構??引用wiki上的定義

    In computer science, a concurrent data structure is a particular way of storing and organizing data for access by multiple computing threads (or processes) on a computer.

    簡而言之,并發數據結構即允許多線程同時訪問(讀和寫)的數據結構。

    閱讀全文

    return top

    淘宝彩票网 ys3| ioc| e3s| wiq| 3kq| aa4| cko| o4y| kky| 4ms| mk2| ce2| qgi| k2o| cci| 3co| sa3| gog| o3w| oeu| 3ei| eu3| qyk| a1w| gaq| aay| k2g| sui| 2ym| su2| akg| y2u| ugi| 2qw| wc1| qyk| c1o| eio| mua| 1aq| ii1| sqc| c1m| wwc| 2me| sa2| qqo| y0y| wym| 0qu| mm0| yg0| syi| y11| aqo| a1w| yqu| 1ug| uu9| weo| c9y| cgs| 0sw| ow0| ii0| wsc| m0o| coi| 0yq| ee0| wae| w8i| moq| 9aq| ai9| ywu| c9m| s9u| ymy| 9iw| yy9| ags| mm8| gqk| u8u| iie| 8um| eq8| uyu| m8o|