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

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

[Kaynak] 【Turn】C# çeşitli kilitler altında çok iş parçacıklı eşzamanlılık

[Bağlantıyı kopyala]
2023-4-13 18:44:49 tarihinde yayınlandı | | | |
Normal koşullarda, çok iş parçacıklı programlama olduğu sürece programın karmaşıklığı önemli ölçüde artar, performans önemli ölçüde azalır ve hata olasılığı büyük ölçüde artar.

Çok iplikli programlama, veri işleme yeteneklerini artırmak için paralel çalıştırmak için tasarlanmıştır, ancak çoğu durumda paylaşılan kaynaklar için rekabet gerektirir, bu nedenle kaynak nesneleri değiştirilirken kilitlenmelidir. Ancak, kilitleri uygulamanın birçok yolu var, bu yüzden C#'da birkaç kilit türünün uygulanması ve performansına bir göz atalım.

Kilitleri kullanmanın birkaç yolu

1. Atomik kilitleme

Interlocked atomik operasyonu ile "kilitsiz" rekabet elde edin. Karşılaştırın.

Resmi açıklama, birden fazla iş parçacığı tarafından paylaşılan değişkenler için atomik işlemler sağlamaktır. İsim Alanı: System.Threading

2. Kritik alan

Birden fazla iş parçacığının seri olarak oluşturulması ve genel kaynaklara veya bir kod parçasına erişmek hızlıdır ve veri erişimini kontrol etmek için uygundur. C#'daki kilit sözdizimi, kritik alan (Monitör) için bir sözdizimi şekeridir.

3. Atomik çalışma

Atomik işlemler, ki bunlar özel bir durumdur, doğası gereği iplik açısından güvenlidir, bu yüzden onları kilitlemeye gerek yoktur.

Resmi olarak verilen bir değişkenin değerini atomik bir işlem şeklinde artırıp sonucu depolamak şeklinde yorumlanır. İsim Alanı: System.Threading

4. Kilidi okuma ve yazma

Okuma-yazma kilitleri, diğer programlar yazarken kaynakları okumaya izin verir, bu yüzden kaynak kirli okumalara izin verirse bu daha uygundur.

Resmi açıklama, kaynak erişimini yönetmek için kullanılan kilitli bir durumu belirtir; bu durum çok iş parçacıklı okuma veya özel yazma erişimi sağlar. Isim alanı System.Threading'dir

5. Semafor

Semaforlar, sınırlı sayıda kullanıcı kaynağını kontrol etmek için tasarlanmıştır.

Resmi açıklama, aynı anda bir kaynak veya kaynak havuzuna erişebilen iş parçacıklarının sayısını sınırlar. Isim alanı System.Threading'dir

6. Etkinlikler

Bazı olayların gerçekleştiğini iş parçacığına bildirmek için kullanılır, ardından bir sonraki görevin başlangıcını başlatır.

Resmi açıklama, iş parçacağı senkronizasyonu olaylarının bir iş parçacağı serbest bırakıldıktan sonra sinyal alındığında otomatik olarak sıfırlandığını belirtir. Bu tür tipler miras alınamaz.

7. Karşılıklı dışlama

C#'da System.Threading isim alanının hemen altında bir Mutex sınıfı vardır; Mutex aslında bir mutex'tir; sadece birden fazla iş parçacığı arasındaki kaynak rekabetini değil, süreçler arasındaki kaynak rekabetini de yönetebilir.


Performans test kodu

Kodu çalıştır

Performans testi sonuçları



Not: Yukarıdaki veriler yalnızca mevcut test ortamının donanım performansının sonucudur ve yalnızca birbirleriyle karşılaştırılabilir.

1) Çeşitli testlerde kilitlenmemek kesinlikle en hızlı yöntemdir, bu yüzden kilitli çalışmaya yol açan kaynak rekabetinden kaçınmaya çalışın.

2) Interlocked. CompareExchange çoklu iş parçacığı çalışmasında sürekli üstün performans sergileyerek ikinci sırada yer alıyor.

3) Üçüncü kilit, kritik bölge de iyi performans gösteriyor, bu yüzden kilitlenme performansının düşük olduğunu söylediklerinde lütfen reddet.

4) Dördüncü yer atomik değişken (Atomik) işlemdir, ancak şu anda sadece değişkenlerin kendi kendine artması ve çıkarılması desteklenir ve uygulanabilirliği güçlü değildir.

5) Beşinci okuma/yazma kilidi (ReaderWriterLockSlim) performansı da fena değil, hiçbir şey okumayı destekliyor ve pratikliği hâlâ nispeten iyi.

6) Kalan semaforlar, olaylar ve muteksler en kötü performansa sahip, elbette kendi uygulama alanları vardır ama kaynak rekabetiyle başa çıkmada iyi performans göstermezler.

Orijinal bağlantı adresi:Bağlantı girişi görünür.





Önceki:ASP.NET Core (16) Dinamik kayıt hizmetlerinin enjeksiyonuna bağlı
Önümüzdeki:Soft route OpenWrt bir USB stick üzerinden çalışmaya başlanıyor
 Ev sahibi| 2023-4-13 tarihinde 18:46:52 tarihinde yayınlandı |
C# programları sadece bir örnekin doğru kodu çalıştırmasına izin verir
https://www.itsvse.com/thread-3391-1-1.html

C# iş parçacıkları tarafından öğrenilen ManualResetEvent ile AutoResetEvent arasındaki fark
https://www.itsvse.com/thread-4810-1-1.html

[Gerçek dövüş]. NET/C#, eşzamanlı yürütme yöntemlerini sınırlamak için SemaphoreSlim kullanır
https://www.itsvse.com/thread-10259-1-1.html

C# Okuma/Yazma Kilidi OkuyucuYazarLockSlim kullanımı
https://www.itsvse.com/thread-3545-1-1.html

.net/c# Kullanıcı çoklu iş parçacıklı eşzamanlılık lock(string){...} Detaylı açıklama
https://www.itsvse.com/thread-7764-1-1.html
2023-4-13 tarihinde 19:21:44 tarihinde yayınlandı |
Biraz öğren...
2023-5-16 tarihinde 20:03:52 tarihinde yayınlandı |
Biraz öğren...
2023-5-19 tarihinde 11:41:25 tarihinde yayınlandı |
Öğrenmeyi öğren
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