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

Görünüm: 14970|Yanıt: 3

[Kaynak] [Gerçek dövüş]. NET/C#, eşzamanlı yürütme yöntemlerini sınırlamak için SemaphoreSlim kullanır

[Bağlantıyı kopyala]
Yayınlandı 19.02.2022 21:23:20 | | | |
Gereksinimler: Donanımın sınırlı kaynakları nedeniyle, programın belirli miktarda donanım kaynağı tüketmesi gerekir; yüksek eşzamanlılık durumunda, programın çok fazla kaynak tüketen bazı yöntemler kısıtlanmazsa (büyük miktarda veri Excel tablosuna aktarılmazsa), tüm programın normal hizmet sağlayamamasını etkileyebilir ve işletim sisteminin normal işleyişini de etkileyebilir.

Semafor ve SemaforSlim Farkı

SemaphoreSlim ve Semaphore işlevsellik açısından benzerdir. SemaphoreSlim, Semaphore'dan yaklaşık 4 kat daha hızlıdır, ancak süreçler arası sinyal için kullanılamaz.

Performans artışının nedeni, SemaphoreSlim sınıfının Windows çekirdeği semaforunu kullanmayan Semaphore sınıfına hafif bir alternatif sunmasıdır. Temelde, semaforlara isim vermeniz gerekmiyorsa, SemaphoreSlim sınıfını kullanın.

SemaphoreSlim, SpinWait ve Monitor tabanlı olduğundan, kilit almak için bekleyen bir iş dizi, kilidi ele geçirmeyi umarak CPU döngülerini tüketir ve ardından başka bir iş parçacığına yol açar. Eğer bu olmazsa, iş parçacağı sistemin bağlamı değiştirmesine ve işletim sistemi o iş parçacığını tekrar planladığında (bazı CPU döngülerini tüketerek) tekrar denemesine izin verir. Bekleme uzun sürerse, bu mod çok fazla CPU döngüsü tüketebilir. Bu uygulamanın en iyi durumu, çoğu zaman bekleme süresi olmaması ve kilidi neredeyse anında alabileceğiniz.
Semaphore, işletim sistemi çekirdeğindeki uygulamalara dayanır, bu yüzden her kilit alındığında oldukça uzun CPU döngüleri sürer, ancak bundan sonra iş parçacığı kilidi almak için gereken süreyi almak için sadece hibernasyona geçer.

Semafor Dokümantasyonu:https://docs.microsoft.com/en-us ... aphore?view=net-6.0
SemaphoreSlim Dokümantasyonu:https://docs.microsoft.com/en-us ... reslim?view=net-6.0

Yöntem yürütülmeden önce, yaygın olarak kullanılan bekleme yöntemleri şunlardırKendi işinizin gerçek durumuna göre arayın

Wait(): SemaphoreSlim'e girebilmek için iş parçacığını engeller.
Wait(0): Yöntem engellenmeyecek. Bekleme kolunun durumunu test eder ve hemen geri döner.
Bekle: Mevcut iş parçacığı, SemaphoreSlim'e girebilene kadar engeller, 32-bit işaretli bir tamsayı kullanarak zaman aşımını belirtir.

Kaynak kodu şöyledir:

Çizimler aşağıdaki gibidir:







Önceki:Linux Secretless Login (ssh) veya Secretless Copy (scp) dosyalarını diğer sunuculara aktarma
Önümüzdeki:Linux, CPU kullanımını simüle etmek için lookbusy kullanır
Yayınlandı 19.02.2022 23:16:57 |
Öğrenmeyi öğren...
Yayınlandı 20.02.2022 22:19:24 |
test
 Ev sahibi| Yayınlandı 18.12.2024 20:40:10 |
C# iş parçacıkları tarafından öğrenilen ManualResetEvent ile AutoResetEvent arasındaki fark
https://www.itsvse.com/thread-4810-1-1.html
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