C ++ 26'daki yenilikler: Kopyalama Güncellemesini Oku | Haberler Online

Adanali

Active member
C ++ 26'daki yenilikler: Kopyalama Güncellemesini Oku | Haberler Online
Kopyalama Güncellemesini Oku (RCU), bir veri yapısının neredeyse tamamen okunduğu çoklu iplikli ortamlarda uygundur, ancak nadiren yazılır.






Rainer Grimm




Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.







Her şeyden önce: RCU nasıl çalışır? Okuma kopyasını güncelleme konusunda İngilizce mükemmel Wikipedia sayfası iyi bir giriş sunuyor:

Bilgisayar Biliminde, kopyalama (RCU) Reads, daha fazla iş parçacığı aynı anda okunur ve güncellenirken, ilkel bloğun kullanımını önleyen bir senkronizasyon mekanizmasıdır. Tablolar).

Bir iş parçacığı paylaşılan bellekteki veri yapılarının öğelerini eklerken veya ortadan kaldırırken, tüm okuyucuların yeni yapının eterini görmesi ve geçmesi garanti edilir, böylece tutarsızlıklardan (zemin kat, derefreting null işaretçileri) kaçınır.

Okumaların performansı çok önemli olduğunda kullanılır ve daha fazla alan pahasına hızlı operasyonlara izin vererek alanın uzlaşmasına bir örnek olduğunda kullanılır. Bu, tüm okuyucuları senkronizasyon yokmuş gibi yapar, bu yüzden neredeyse olacaklar, ancak güncellemeleri zorlaştıracaklar



RCU adı iş akışı yazarı tarafından modellenmiştir. Önce geçerli veriler okunur, yeni verilere kopyalanır ve ardından geçerli verileri günceller.



P2545R4 teklifi RCU için üç başvuru sunar ve bunu okuyucu yazarının okuyucularıyla karşılaştırır.

Üç Uygulama


Üç uygulama, okuyucu-chusures'ı müdahaleci, müdahaleci olmayan ve RCU'ların senkronizasyonuyla karşılaştırır.





Müdahaleci okuma kopyasının güncellenmesi



Müdahaleci okuma kopyasının güncellenmesi


(Resim: Açık Standartlar (Open-Std.org))





İlgili olmayan okuma kopyasının güncellenmesi



İlgili olmayan okuma kopyasının güncellenmesi


(Resim: Açık Standartlar (Open-Std.org))





Senkron okuma kopyasının güncellenmesi



Senkron okuma kopyasının güncellenmesi


(Resim: Açık Standartlar (Open-Std.org))



Müdahaleci ve hoş olmayan RCU arasındaki temel fark, müdahaleci durumda Data Doğrudan sınıftan türemiştir struct Data : std::rcu_obj_base<Data>. Bir modelin kendisini bir parametre olarak sahip olduğu bu teknik, meraklı yinelenen bir model (CRTP) olarak bilinir. Okuyucunun tarafında yapacak std::scoped_lock l(std::rcu_default_domain()) kullanılmış. Ayrıca yazmanın yanında retire() VEYA std::rcu_synchronize() kullanılmış.

Bu şu soruyu gündeme getiriyor: Paylaşılan atom bölümleri, okuma yazarları, tehlikeli ve RCU yazarları gibi benzer teknikler ne zaman kullanılmalıdır? P2545R4 teklifi basit bir kural sağlar: çok yaklaşık bir ampirik kural olduğundan, tehlikeli bölümler referans sayaçlar için ölçeklenebilir bir yedek olarak düşünülebilir ve RCU, okuyucu yazarlarının kilitlenmesi için ölçeklenebilir bir yedek olarak düşünülebilir. Bu tabloda, tehlikeli ve RCU bölümleri yüksek düzeyde referans sayımı görüntülenir:





Karşılaştırma tablosu



Tablo, RCU'yu referans sayısı ve tehlikeli bölümlerle karşılaştırır


(Resim: Açık Standartlar (Open-Std.org))



RCU arayüzü


Arayüz sınıflardan oluşur rcu_obj_base VE rcu_domain işlevlerin yanı sıra rcu_default_domain,, rcu_synchronize,, rcu_barrier VE rcu_retire.

CPPReference kısa bir açıklama sunar:

Dersler

  • rcu_obj_base: Bir RCU nesnesini korumanızı sağlar
  • rcu_domain: RCU koruma bölgesini sağlar
İşlevler

  • rcu_default_domain: Bir std :: rcu_domain statik süreli nesneye referans döndürür
  • rcu_synchronize: Bir koruma bölgesi bir RCU etki alanında açılana kadar engelleyin
  • rcu_barrier: Önceki tüm değerlendirmeler tamamlanana kadar bir RCU alanında planlanan işlemleri ve blokları değerlendirebilir
  • rcu_retire: RCU alanında belirtilen bir fonksiyonun değerlendirilmesini, belleğin tahsisi ve planlanan değerlendirmeyi çağırma potansiyelini planlayın
Sırada ne var?

Bir sonraki makalemde, paralel veri verileri (SIMD) ve bunların yeterli işlemleri için kütüphaneye daha yakından bakacağım.


(RME)




Ne yazık ki, bu bağlantı artık geçerli değil.

Boşa harcanan eşyalara olan bağlantılar, 7 günlük daha büyükse veya çok sık çağrılmışsa gerçekleşmez.


Bu makaleyi okumak için bir Haberler+ paketine ihtiyacınız var. Şimdi yükümlülük olmadan bir hafta deneyin – yükümlülük olmadan!
 
Üst