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 çok iş parçacığının bir koleksiyona öğe ekleyip kaldırdığı senaryolarda ve System.Collections.Generic.List<T> (kullanıcı tarafından uygulanan kilitleme ile) gibi System.Collections.ArrayList türler üzerinde performansı önemli ölçüde iyileştirebilir.
Aşağıdaki tabloda eşzamanlı koleksiyon sınıfları listelanmaktadır:
Type | Açıklama |
---|---|
System.Collections.Concurrent.BlockingCollection<T> | uygulayan System.Collections.Concurrent.IProducerConsumerCollection<T>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ı bloğu. 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> destekleyen IEnumerable<T>herhangi bir koleksiyon sınıfı için engelleme ve sınırlayıcı 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. İş Parçacığı Kasa Koleksiyonları.
Eşitleme Temel Bilgileri
Ad alanında eşitleme ilkelleri, eski çok iş parçacıklı kodda System.Threading 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:
Type | Açıklama |
---|---|
System.Threading.Barrier | Birden çok iş parçacığının, her görevin gelişini işaret ettiği ve bazı veya tüm görevler gelene kadar engelleyebileceği bir nokta sağlayarak bir algoritma üzerinde paralel olarak çalışmasını sağlar. Daha fazla bilgi için bkz . Bariyer. |
System.Threading.CountdownEvent | Kolay bir randevu mekanizması sağlayarak çatal ve birleştirme senaryolarını basitleştirir. Daha fazla bilgi için bkz . CountdownEvent. |
System.Threading.ManualResetEventSlim | benzeri System.Threading.ManualResetEventbir eşitleme ilkel. 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 bkz.
Yavaş Başlatma Sınıfları
Yavaş başlatma ile, bir nesne için bellek gerekli olana kadar 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:
Type | 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 başlatma işlevini yavaş çağırarak, iş parçacığı başına ayrı ayrı başlatılan bir değer sağlar. |
System.Threading.LazyInitializer | Ayrılmış, gecikmeli başlatma örneği ayırma gereğini önleyen statik yöntemler sağlar. Bunun yerine, hedeflere erişilirken başlatıldığından emin olmak için başvuruları kullanırlar. |
Daha fazla bilgi için bkz . Gecikmeli Başlatma.
Toplama Özel Durumları
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 ve PLINQ bu amaçla yoğun bir şekilde kullanılırAggregateException. Daha fazla bilgi için bkz . Özel Durum İşleme ve Nasıl yapılır: PLINQ Sorgusunda Özel Durumları İşleme.