Daha fazla okuma:
Genel senkronizasyon ilkelleri ile ilgilenen ve farklı senaryolara ve iş parçacığı sayısına bağlı olarak Monitör, C # kilit ifadesi davranışı, özellikleri ve maliyetlerini araştıran birkaç makalemi sunmak istiyorum. Birden çok senaryoda ne kadar çalışmanın gerçekleştirilebileceğini anlamak için özellikle CPU israfı ve işlem süreleri ile ilgilenir:
https://www.codeproject.com/Articles/1236238/Unified-Concurrency-I-Introduction
https://www.codeproject.com/Articles/1237518/Unified-Concurrency-II-benchmarking-methodologies
https: // www. codeproject.com/Articles/1242156/Unified-Concurrency-III-cross-benchmarking
Orijinal cevap:
Ah hayatım!
Görünüşe göre burada CEVAP olarak işaretlenen doğru cevap, doğası gereği yanlış! Saygılarımla, cevabın yazarından bağlantılı makaleyi sonuna kadar okumasını rica ediyorum. makale
2003 tarihli makalenin yazarı yalnızca Çift Çekirdekli makinede ölçüm yapıyordu ve ilk ölçüm durumunda, kilitlemeyi yalnızca tek bir iş parçacığı ile ölçtü ve sonuç, kilit erişimi başına yaklaşık 50ns oldu.
Eşzamanlı ortamda bir kilit hakkında hiçbir şey söylemiyor. Bu yüzden makaleyi okumaya devam etmeliyiz ve ikinci yarıda yazar kilitleme senaryosunu iki ve üç iş parçacığı ile ölçüyordu, bu da günümüz işlemcilerinin eşzamanlılık düzeylerine yaklaşıyor.
Bu yüzden yazar, Çift Çekirdekli iki iş parçacığı ile kilitlerin 120ns'ye mal olduğunu ve 3 iş parçacığı ile 180ns'ye gittiğini söylüyor. Dolayısıyla, kilide aynı anda erişen iş parçacığı sayısına açıkça bağlı görünüyor.
Yani basittir, kilidin işe yaramaz hale geldiği tek bir iş parçacığı olmadığı sürece 50 ns değildir.
Dikkate alınması gereken bir diğer konu da, ortalama süre olarak ölçülmesidir !
Yinelemelerin süresi ölçülürse, 1 ms ile 20 ms arasında bile zamanlar olurdu, çünkü çoğunluk hızlıydı, ancak birkaç iş parçacığı işlemcilerin zamanını bekliyor olacak ve hatta milisaniyelik uzun gecikmelere neden olacak.
Bu, yüksek verim, düşük gecikme süresi gerektiren her tür uygulama için kötü bir haber.
Ve dikkate alınması gereken son konu, kilidin içinde daha yavaş işlemlerin olabileceğidir ve çoğu zaman durum böyledir. Kod bloğu kilidin içinde ne kadar uzun süre çalıştırılırsa, çekişme o kadar yüksek olur ve gecikmeler gökyüzüne yükselir.
Lütfen, 2003'ten on yıldan fazla bir süre geçtiğini, yani tamamen eşzamanlı olarak çalışacak şekilde özel olarak tasarlanmış birkaç nesil işlemci olduğunu ve kilitlemenin performanslarına önemli ölçüde zarar verdiğini göz önünde bulundurun.