Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.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.