SORU
3 Mayıs 2011, Salı


Ne zaman bir dışlama yerine bir sayaç kilidi kullanmalısınız?

Ben de aynı işi yapıyor sanırım,nasıl eşitleme için kullanmaya karar veriyorsunuz?

CEVAP
3 Mayıs 2011, Salı


Teori

Bir iş parçacığı bir dışlama kilitlemek için çalışır ve zaman uyumu sağlayıcısı zaten kilitli olduğu için başarılı, değil mi zaman teoride, uyumak, hemen başka bir iş parçacığı çalıştırmak için izin devam edecek. Zaman uyumu önce kilit tutan her neyse tarafından kilitli bir kez dava olacak uyandırılmaktan kadar uyumaya devam edecek. Ne zaman bir iş parçacığı çalışır için kilit bir sayaç kilidi ve başarılı olacak sürekli yeniden deneyin kilitleme, ta ki sonunda başarılı olur; böylece o-ecek değil izin vermek için başka bir iş parçacığı almak yerine (ancak işletim sistemi olacak zorla geçmek için başka bir iş parçacığı, bir kez CPU zamanı kuantum geçerli iş parçacığı oldu aştı, elbette).

Sorun

Uyumu sorunu konuları uyutuyor ve tekrar uyanma CPU talimatları oldukça çok ihtiyacımız var ve de biraz zaman alabilir böylece onlar olacak oldukça pahalı hem de işlemler vardır. Şimdi Eğer zaman uyumu sadece kilitli için çok kısa bir süre, harcanan zaman koyarak bir iş parçacığı için uyku ve uyanma tekrar olabilir geçen sefer konu var aslında uyurken çok ve belki hatta geçen sefer konu olurdu boşa tarafından sürekli yoklama bir sayaç kilidi. Öte yandan, yoklama bir sayaç kilidi sürekli atık İŞLEMCİ zamanı ve eğer kilit düzenlenen bir daha uzun bir süre, bu atık çok fazla CPU süresi ve olması çok daha iyi, eğer iplik uyumak yerine.

Çözüm

Kullanarak spinlocks bir tek çekirdekli işlemci/CPU tek sistem yapar genelde anlamsız beri sürece kilidi yoklama kapatıyor yalnızca CPU çekirdek, başka bir iş parçacığı çalıştırmak ve o zamandan beri başka bir iş parçacığı çalıştırmak, kilidi olmayacak kilidi ya. ALÇAK, bir sayaç kilidi hiçbir gerçek yararı için bu sistemlerin sadece CPU zaman kaybına neden olur. Eğer iş yerine uyutmak olsaydı, başka bir iş parçacığı aynı anda, muhtemelen kilit Anahtarcı ve sonra ilk iş parçacığı tekrar uyandım sonra işleme devam etmek için izin kaçmış olabilir.

Bir çoklu çekirdek/çoklu İŞLEMCİ sistemleri, bol kilitler yapılır için bir çok kısa bir süre, sadece zaman kaybı için sürekli koyarak iş parçacığı için uyku ve uyanma onları tekrar çalışma zamanı performansını önemli ölçüde azalma olabilir. Kullanırken spinlocks yerine, iş parçacıkları şans yararlanmak için onların tam zamanı kuantum (her zaman sadece engelleme için çok kısa bir süre, ama sonra hemen işlerini devam), önde gelen çok yüksek işlem hacmi.

Uygulama

Çünkü çok sık programcılar kimse bilemez önceden eğer uyumu veya spinlocks daha iyi olacaktır. (örn çünkü numarasının CPU çekirdek hedef mimarlık bilinmiyor), ne olabilir işletim sistemleri eğer belli bir parça kod optimize edilmiş tek çekirdekli ya da çok çekirdekli ortamlarda, çoğu sistem yok kesinlikle ayrım arasındaki uyumu ve spinlocks. Aslında, çoğu modern işletim sistemleri, hibrid uyumu ve melez spinlocks. Bu aslında ne anlama geliyor?

Melez bir dışlama ilk başta çok çekirdekli bir sistemde bir sayaç kilidi gibi davranır. Eğer bir iş parçacığı olamaz, zaman uyumu kilidi, zaman uyumu, zaman uyumu ilk tam olarak bir sayaç kilidi gibi davranır yerine çok yakında kilitli, bu yüzden olabilir bu yana, hemen uyutmak olmayacak. Eğer kilidi hala belirli bir süre (ya da deneme ya da herhangi bir diğer ölçüm faktörü) sonra elde edilmiştir, bu konuyu gerçekten uyuttu. Eğer aynı kodu sadece tek bir çekirdek ile bir sistem üzerinde çalışıyorsa, zaman uyumu, bakınız, bu faydalı olmaz gibi olsa da sayaç kilidi olmaz.

Melez bir sayaç kilidi ilk başta normal bir sayaç kilidi gibi davranır, ama CPU çok fazla zaman harcıyorsun önlemek için, arka kapalı bir strateji olabilir. Bu genellikle koyun iplik uyku (beri bunu istemezsin başına kullanırken, bir sayaç kilidi), ama olabilir karar durdurmak için iş parçacığı (ya hemen ya da sonra belirli bir süre) ve izin için başka bir iş parçacığı çalıştırmak, böylece artan şansını kilidi kilidi (saf iplik geçiş genellikle daha az pahalı birden içerir koyarak bir iş parçacığı için uyku ve uyanma tekrar daha sonra, ama şimdiye kadar).

Özet

Şüphe, birbirini kapsamayan nesneler, genellikle daha iyi bir seçimdir ve en modern sistemler zaman çok kısa bir süre için sayaç kilidi için izin verir, eğer bu yararlı görünüyor. Spinlocks kullanarak bazen performans, ancak belirli koşullar ve şüphe içinde şu anda bir sayaç kilidi yararlı olabilir nerede herhangi bir proje üzerinde çalışıyorsunuz değil daha doğrusu bana söyler, sen aslında sadece altında artırabilirsiniz. Şöyle düşünebilirsin kullanarak kendi "kilit nesne", ya da bir sayaç kilidi veya dışlama dahili (örneğin, bu davranış olabilir yapılandırılabilir oluştururken böyle bir nesne), başlangıçta kullanmak uyumu her yerde ve eğer düşündüğün kullanarak bir sayaç kilidi bir yerde olabilir gerçekten yardım, denemek ve sonuçları karşılaştırmak (örneğin kullanarak bir profiler), ama emin olmak için test her iki durumda da, tek çekirdekli ve çok çekirdekli sistem önce sonuca varma (ve muhtemelen farklı işletim sistemleri, kod çapraz platform) olacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • Howcast

    Howcast

    4 EKİM 2007
  • RiceBunny

    RiceBunny

    16 ŞUBAT 2006