Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 69126|Yanıt: 4

[Kaynak] .NET/C# İplik Güvenliği Koleksiyonu (derleme)

[Bağlantıyı kopyala]
Yayınlandı 6.06.2017 17:13:53 | | |
.NET Framework 1.0'da tanıtılan koleksiyonlar System.Collections isim alanında bulunabilir. Bu koleksiyonlar, yaygın kullanılan ArrayList ve Hashtable dahil, Synchronized özelliği aracılığıyla bir tür iş parçacığı güvenliği sağlar; bu özellik, koleksiyonla ilgili iş parçacığı güvenli bir wrapper döndürür. Wrapper, her ekleme veya çıkarma işlemi için tüm seti kilitleyerek çalışır. Bu nedenle, koleksiyona erişmeye çalışan her iş parçacığı, kilidi alma sırası gelene kadar beklemek zorundadır. Bu ölçeklenebilir değildir ve büyük koleksiyonlar için önemli bir performans düşüşüne yol açar. Ayrıca, bu tasarım tartışmayı tamamen engellemez. Daha fazla bilgi için MSDN web sitesindeki aşağıdaki sayfaya bakınız: Genel Koleksiyonlarda Senkronizasyon

.NET Framework 2.0'da tanıtılan koleksiyon sınıfı, System.Collections.Generic isim alanında bulunabilir. Bu koleksiyon sınıfları arasında List<T>, Sözlük< TKey, TValue> vb. bulunur. Bu sınıflar, .NET Framework 1.0 sınıflarına kıyasla daha yüksek tür güvenliği ve performansı sağlar. Ancak, .NET Framework 2.0 koleksiyon sınıfı herhangi bir iş parçacığı senkronizasyonu sağlamaz; Aynı anda birden fazla iş parçacığına öğe ekleyip çıkarıldığında, kullanıcı kodu tüm senkronizasyonu sağlamalıdır.

.NET Framework 4'te eşzamanlı koleksiyon sınıflarını kullanmanızı öneririz çünkü bunlar sadece .NET Framework 2.0 koleksiyon sınıflarının tür güvenliğini değil, aynı zamanda .NET Framework 1.0 koleksiyonunun sunduğu iş parçacığı güvenliğinden daha verimli ve eksiksiz iş parçacığı güvenliği sağlar.


Bazı eşzamanlı koleksiyon türleri, .NET Framework 4'te yeni olan SpinLock, SpinWait, SemaphoreSlim ve CountdownEvent gibi hafif senkronizasyon mekanizmalarını kullanır. Genellikle, yukarıdaki senkronizasyon tipleri iş parçacığını gerçek bekleme durumuna koymadan önce kısa bir süre için "yoğun dönme" kullanır. Bekleme süresinin çok kısa olması bekleniyorsa, spin beklemeye göre çok daha az hesaplama kaynağı tüketir; bekleyiş ise çekirdek dönüşümleri çok fazla kaynak tüketir. Rotasyon kullanan koleksiyon sınıfları için bu verimlilik, birden fazla iş parçacığının çok hızlı bir şekilde eşya ekleyip çıkarabilmesini sağlar. Sınırlama ve engelleme hakkında daha fazla bilgi için SpinLock ve SpinWait'e bakınız. ConcurrentQueue<T> ve ConcurrentStack<T> sınıfları hiç kilitler kullanmaz. Bunun yerine, iplik güvenliği için Kilitli işlemlere dayanırlar.

Göstermek

Eşzamanlı koleksiyon sınıfları ICollection'u desteklediği için, IsSynchronized ve SyncRoot özellikleri için uygulamalar sağlarlar, bunlar ilişkisiz olsa bile. IsSynchronized her zaman false dönerken, SyncRoot her zaman null (Visual Basic'te Nothing Nothing olur).

Aşağıdaki tablo, System.Collections.Concurrent ismspace'deki koleksiyon türlerini listeler.



tür
Açıklama
BlockingCollection<T>
<T> IProducerConsumerCollection'ı uygulamak için her türlü throttling ve engelleme sağlar. Daha fazla bilgi için BlockingCollection genel bakışına bakınız.
ConcurrentDictionary<TKey, TValue>
Anahtar/değer, sözlüğün iş başlığı güvenli uygulamasıdır.
ConcurrentQueue<T>
FIFO (ilk giren, ilk çıkan) kuyruklarının iş parçacığı güvenliği uygulaması.
ConcurrentStack<T>
LIFO (last-in, first-out) yığınlarının iş parçacığı güvenli uygulaması.
ConcurrentBag<T>
Sırasız bir eleman koleksiyonunun iş başlığı güvenli uygulaması.
IProducerConsumerCollection<T>
Türler şu şekilde uygulanmalıdırBlockingCollectionKullanılan arayüzler







Önceki:PDF kodu oluşturmak için .net/c# itextsharp
Önümüzdeki:Kurulum Paketi: "MvvmLightLibs" zaten "CommonServiceLocator" için tanımlanmış bir bağımlılığa sahip...
Yayınlandı 8.11.2017 15:24:45 |
Evet, öğrendim
 Ev sahibi| Yayınlandı 8.02.2021 10:00:41 |
Liste yineleme sırasında<T> hiç değiştirilmezse iş parçacığı güvenli olur.
 Ev sahibi| Yayınlandı 23.03.2021 11:32:46 |
ConcurrentDictionary yeni ve güncellenmiş güncellemeleri destekler
https://www.itsvse.com/thread-2955-1-1.html

 Ev sahibi| Yayınlandı 24.06.2023 14:20:57 |
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com