日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
.NET 4.0 Beta 2改進對協(xié)調數據結構類庫

對于.NET 4.0 Beta 2,大家可能還處于試用階段,本文將討論的是.NET 4.0 Beta 2改進對協(xié)調數據結構類庫,希望對大家有所幫助。

網站建設哪家好,找創(chuàng)新互聯(lián)建站!專注于網頁設計、網站建設、微信開發(fā)、小程序制作、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鉛山免費建站歡迎大家使用!

協(xié)調數據結構(Coordination Data Structures,CDS)被設計為在并發(fā)環(huán)境下使用的組件,它也可用于構建復雜的并發(fā)框架。此外,它還包含了高級的同步工具,如Barrier,多種線程安全的集合,以及多種構建Future模型的方式。

#T#

Barrier類的作用是在多個階段的操作之間創(chuàng)建同步點。在使用之前,Barrier需要知道有多少線程將會使用它。每個線程達到檢查點時,便要調用Barrier的SignalAndWait方法。這么做會引起阻塞,當所有線程都調用了這個方法后,便會同時釋放所有線程。這個過程可以重復多次,每個這樣的迭代都會增加其CurrentPhaseNumber屬性。用于監(jiān)控的代碼可以隨時檢查正在使用Barrier的線程,以及還沒有到達檢查點的線程數量。CurrentPhaseNumber為Int64類型,因此每個Barrier可以支持多達9,223,372,036,854,775,807個階段(之前的beta版本使用Int32,因此受限于40億個階段)。

BlockingCollection類用于生產者/消費者場景。它最簡單的使用模式便是作為一個線程安全的隊列,并且在隊列為空時阻塞消費者。為了避免隊列元素過多,你也可以為它設置一個最大值。在到達最大容量時,生產者便會被阻塞,直到某個消費者取出元素。當BlockingCollection填充完畢之后,生產者可以將其標記為完成。這樣便無法添加更多的元素,同時也會釋放了所有的消費者。

BlockingCollection并非只能單獨使用,多個 BlockingCollection可以一起使用。在這種模式下,生產者和消費者可以指明為任意一個BlockingCollection添加或刪除元素,而不在乎某個特定的集合。這么做可以充分在集合之間的實現(xiàn)某種負載均衡。

ConcurrentDictionary類支持原子性的添加和更新操作。為了實現(xiàn)這個功能,你需要向GetOrAdd及AddOrUpdate方法中傳入一個委托。如果當前鍵不在集合中便會調用Add委托。如果鍵存在,那么便會返回對應的值,或是將其傳遞給Update委托。

原本還有計劃實現(xiàn)一個并行鏈表,但是這點在beta 2中被取消了。Joshua Phillips寫到,他們無法為這個類在性能和可用性之間做出平衡:

在每個軟件專業(yè)人士的職業(yè)生涯中,總會遇到某些情況需要放棄他們所鐘愛的東西。他們的發(fā)明雖然很棒,但總會有這樣那樣的原因,導致這些東西失去存在的充分價值。我知道你們對Beta 1中的ConcurrentLinkedList 很感興趣,但是我們打算放棄它了(雖然之前我們沒有給出提示)。很不幸,經過一段時間的研究,我們發(fā)現(xiàn)無法同時提供很好的可用性以及性能。似乎目前已經有許多線程安全的鏈表實現(xiàn),它們的伸縮性很好,但是這種高度伸縮能力是建立在某些假設或是一些奇怪的設計方式上的,它們總會在一些特別的情況下引起嚴重的性能問題。移除CLL 讓我們很受傷,但是它的性能的確無法滿足發(fā)布的要求。

對于需要延遲執(zhí)行的函數,目前有了兩個選擇。如果你想使用future模型來傳遞那些只在需要時才調用的函數,那么可以使用Lazy類。這個類封裝了一個函數,保證它只在第一次訪問Value屬性的時候才執(zhí)行,以后對于Value屬性的多次訪問不會引起函數的重復調用。

第二個選項則是LazyInitializer模塊。EnsureInitialized方法是一個保證初始化完成的輕量級做法,它在(且僅在)目標變量為null的情況才調用委托。這保證了目標變量只會設置一次。不過,如果沒有使用同步對象的話,委托可能會被幾個并發(fā)線程調用多次。


分享標題:.NET 4.0 Beta 2改進對協(xié)調數據結構類庫
文章分享:http://www.5511xx.com/article/dpsghgo.html