Aracılığıyla paylaş


Paralel Programlama için Veri Yapıları

.NET eşzamanlı koleksiyon sınıfları kümesi, basit eşitleme temelleri ve yavaş başlatma türleri dahil olmak üzere paralel programlamada yararlı olan çeşitli türler sağlar. Bu türleri, Görev Paralel Kitaplığı ve PLINQ dahil olmak üzere çok iş parçacıklı herhangi bir uygulama koduyla kullanabilirsiniz.

Eşzamanlı Koleksiyon Sınıfları

Ad alanı içindeki System.Collections.Concurrent koleksiyon sınıfları, mümkün olan her yerde kilitleri önleyen ve kilitlerin gerekli olduğu yerlerde ayrıntılı kilitleme kullanan iş parçacığı açısından güvenli ekleme ve kaldırma işlemleri sağlar. Eşzamanlı koleksiyon sınıfı, öğelere eriştiğinde kullanıcı kodunun herhangi bir kilit almasını gerektirmez. Eşzamanlı koleksiyon sınıfları, birden fazla iş parçacığının bir koleksiyona öğe ekleyip kaldırdığı senaryolarda, System.Collections.ArrayList ve System.Collections.Generic.List<T> gibi türler ile kıyaslandığında (kullanıcı tarafından gerçekleştirilen kilitleme ile), performansı önemli ölçüde iyileştirebilir.

Aşağıdaki tabloda eşzamanlı koleksiyon sınıfları listelanmaktadır:

Türü Açıklama
System.Collections.Concurrent.BlockingCollection<T> System.Collections.Concurrent.IProducerConsumerCollection<T> uygulamasında iş parçacığı güvenli koleksiyonlar için engelleme ve sınırlama özellikleri sağlar. Kullanılabilir yuva yoksa veya koleksiyon doluysa, üretici iş parçacıkları bloke olur. Koleksiyon boşsa tüketici iş parçacıkları engeller. Bu tür, tüketiciler ve üreticiler tarafından engelleyici olmayan erişimi de destekler. BlockingCollection<T>, IEnumerable<T> destekleyen herhangi bir koleksiyon sınıfı için engelleme ve sınırlama sağlamak üzere temel sınıf veya yedekleme deposu olarak kullanılabilir.
System.Collections.Concurrent.ConcurrentBag<T> Ölçeklenebilir ekleme ve alma işlemleri sağlayan iş parçacığı güvenli bir çanta uygulaması.
System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> Eşzamanlı ve ölçeklenebilir sözlük türü.
System.Collections.Concurrent.ConcurrentQueue<T> Eşzamanlı ve ölçeklenebilir bir FIFO kuyruğu.
System.Collections.Concurrent.ConcurrentStack<T> Eşzamanlı ve ölçeklenebilir BIR LIFO yığını.

Daha fazla bilgi için bkz. Thread-Safe Koleksiyonları.

Eşitleme İlkelleri

System.Threading ad alanındaki eşzamanlama öncelikleri, eski çok iş parçacıklı kodda bulunan pahalı kilitleme mekanizmalarından kaçınarak ayrıntılı eşzamanlılık ve daha hızlı performans sağlar.

Aşağıdaki tabloda eşitleme türleri listelenmiştir:

Türü Açıklama
System.Threading.Barrier Birden çok iş parçacığının, her görevin gelişini işaretleyebileceği ve daha sonra bazı veya tüm görevler gelene kadar bekleyebileceği bir noktayı sağlayarak bir algoritma üzerinde paralel çalışmasını mümkün kılar. Daha fazla bilgi için bkz . Bariyer.
System.Threading.CountdownEvent Görüşme mekanizması sağlayarak paralel dağılım ve toplanma senaryolarını basitleştirir. Daha fazla bilgi için bkz. CountdownEvent.
System.Threading.ManualResetEventSlim System.Threading.ManualResetEvent benzeri bir senkronizasyon primi. ManualResetEventSlim daha hafiftir ancak yalnızca işlem içi iletişim için kullanılabilir.
System.Threading.SemaphoreSlim Bir kaynağa veya kaynak havuzuna eşzamanlı olarak erişebilecek iş parçacığı sayısını sınırlayan bir eşitleme temel bilgisi. Daha fazla bilgi için bkz. Semaphore ve SemaphoreSlim.
System.Threading.SpinLock Kilidi almaya çalışan iş parçacığının bir döngüde beklemesine veya kuantumunu vermeden önce bir süre döndürmesine neden olan karşılıklı dışlama kilit temeli. Kilidi beklemenin kısa olması beklenen senaryolarda, SpinLock diğer kilitleme biçimlerinden daha iyi performans sunar. Daha fazla bilgi için bkz . SpinLock.
System.Threading.SpinWait Belirtilen süre boyunca dönecek ve dönüş sayısı aşılırsa iş parçacığını bekleme durumuna alacak küçük, hafif bir tür. Daha fazla bilgi için bkz . SpinWait.

Daha fazla bilgi için bakınız:

Yavaş Başlatma Sınıfları

Tembel başlatma yöntemi ile, bir nesne için bellek gerekli olmadıkça ayrılmaz. Yavaş başlatma, nesne ayırmalarını bir programın yaşam süresine eşit olarak yayarak performansı artırabilir. türünü Lazy<T>kaydırarak herhangi bir özel tür için gecikmeli başlatmayı etkinleştirebilirsiniz.

Aşağıdaki tabloda yavaş başlatma türleri listelenmiştir:

Türü Açıklama
System.Lazy<T> Basit, iş parçacığı güvenli yavaş başlatma sağlar.
System.Threading.ThreadLocal<T> Her iş parçacığının tembel bir şekilde başlatma işlevini çağırmasıyla, iş parçacığı başına tembel başlatılmış bir değer sağlar.
System.Threading.LazyInitializer Tembel başlangıç örneğini ayırmayı gerektirmeden statik yöntemler sağlar. Bunun yerine, hedeflere erişilirken başlatıldıklarından emin olmak için referanslar kullanırlar.

Daha fazla bilgi için bkz. gecikmeli başlatma.

Toplu İstisnalar

Türü System.AggregateException , ayrı iş parçacıklarında eşzamanlı olarak oluşan birden çok özel durumu yakalamak ve bunları birleştiren iş parçacığına tek bir özel durum olarak döndürmek için kullanılabilir. System.Threading.Tasks.Task ve System.Threading.Tasks.Parallel türleri ile PLINQ, bu amaçla AggregateException'yi yoğun bir şekilde kullanır. Daha fazla bilgi için bkz. Özel Durum İşleme ve Nasıl yapılır: PLINQ Sorgusunda Özel Durumları İşleme.

Ayrıca bakınız