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:
|