Yazılım geliştirme: eşzamanlı uygulamalar için modeller

Adanali

Active member
Yazılım geliştirme: eşzamanlı uygulamalar için modeller


  1. Yazılım geliştirme: eşzamanlı uygulamalar için modeller

Modeller, modern yazılım geliştirme ve yazılım mimarisinde önemli bir soyutlamadır. İyi tanımlanmış terminoloji, açık belgeler sunar ve en iyisinden öğrenirler. Rekabet alanında kanıtlanmış birçok model var. Paylaşım ve düzenleme gibi senkronizasyon sorunlarının yanı sıra rakip mimarilerle de ilgilenirler.







Rainer Grimm, uzun yıllardır yazılım mimarı, ekip lideri ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanır, aynı zamanda sık sık uzmanlık konferanslarında konuşmaktan da keyif alır. Modernes C++ blogunda yoğun bir şekilde C++ tutkusundan bahsediyor.













Eşzamanlılıkla ilgili temel sorun, paylaşılan ve değişen durumdur veya Tony Van Eerd’in CppCon 2014’teki “Örnek Olarak Kilitsiz” konuşmasında belirttiği gibi: “Anaokulunda öğrendiklerinizi unutun (yani paylaşmayı bırakın)“. Rekabet için önemli bir terim veri yarışıdır:

  • A veri için yarış en az iki iş parçacığı ortak bir değişkene aynı anda eriştiğinde gerçekleşir. En az bir iş parçacığı değişkeni değiştirmeye çalışır. Bir program bir dizi veriye sahip olduğunda, süresiz olarak davranır. Bu, tüm sonuçların mümkün olduğu ve C++ standardının artık vaatte bulunmadığı anlamına gelir.







Veri acelesi için gerekli bir koşul değişken ve paylaşımlı durumdur. Paylaşımda veya mutasyonda uzmanlaşmak veri acele etmelerini önler. Senkronizasyon şablonlarının amacı budur. Ayrıca, aktif nesne ve izleme nesnesi gibi klasikler, eşzamanlı mimariyle ilgilenir.

senkronizasyon şeması



Sync Modelleri’nin amacı, parçaları yönetmek ve değiştirmektir.

taşıma parçaları

Paylaşmazsanız, hiçbir veri yarışı ortaya çıkamaz. Paylaşım olmaması, iş parçacığınızın yerel değişkenler üzerinde çalıştığı anlamına gelir. Bu, bir Kopyalanmış Değer, iş parçacığına özel bellek kullanımı veya bir iş parçacığının sonucunun güvenli bir veri kanalı aracılığıyla ilişkili geleceğe aktarılmasıyla elde edilebilir.

Değer kopyalandı

Bir iş parçacığı argümanlarını referans yerine kopya ile aldığında, veri erişimini senkronize etmeye gerek yoktur. Ömür boyu veri yarışları ve sorunları yoktur.

Konuya özgü bellek

İş parçacığına özgü veya iş parçacığı yerel depolama, birden çok iş parçacığının küresel bir erişim noktası aracılığıyla yerel depolamayı paylaşmasına izin verir. Bellek tanımlayıcısını kullanma thread_local bir değişken iş parçacığı yerel değişkeni haline gelir. Bu, iş parçacığı yerel değişkenini eşitleme olmadan kullanabileceğiniz anlamına gelir.

gelecek

C++11, üç farklı şekilde vadeli işlemler ve vaatler sunar: std::async, std::packaged_tasçifti sevin std::promise VE std::future. Gelecek, ilişkili söz tarafından ayarlanan değer için salt okunur bir yer tutucudur. Senkronizasyon perspektifinden bakıldığında, bir söz-gelecek çiftinin temel özelliği, güvenli bir veri kanalının bunları birbirine bağlamasıdır.

değişimle uğraşmak


Aynı anda veri yazıp okumazsanız, veri yarışı mümkün değildir. Hedefli veya stratejik blok gibi bir blokla önce kritik bölümlerin güvenliğini sağlamak önemlidir. Nesne yönelimli tasarımda, kritik bölüm, arayüzü de dahil olmak üzere genellikle bir nesnedir. İş parçacığı güvenli arayüzü tüm nesneyi korur. Korumalı askıya alma şemasında, değiştirme ipliği işini bitirdiğinde sinyal verir.

hedeflenen blok

Kapsamlı engelleme, kaynak edinme fikrinin bir mutekse uygulanan başlatma (RAII) olduğu fikridir. Bu dilin özü, kaynakların elde edilmesini ve serbest bırakılmasını bir nesnenin yaşamına bağlamaktır. Adından da anlaşılacağı gibi, nesnenin ömrü kapsamı vardır. Bu, C++ çalışma zamanının nesneyi yok etmekten ve ardından kaynağı serbest bırakmaktan sorumlu olduğu anlamına gelir.

stratejik kapanış

Strateji engelleme, strateji modelinin bloklara uygulanmasıdır. Bu, engelleme stratejisinin bir nesne içinde kapsüllendiği ve sistemin bir bileşeni haline geldiği anlamına gelir.

Güvenli arayüz

İş parçacığı güvenli arayüzü, kritik bölümler nesne olduğunda iyi çalışır. Tüm üye işlevlerini bir kilitle korumaya yönelik saf fikir, en iyi ihtimalle bir performans sorununa ve en kötü ihtimalle bir kilitlenmeye yol açar.

İş parçacığı güvenli arayüzü ile her iki sorunun da üstesinden gelinir. İşte fikir:

  • Arayüzün tüm (genel) üye fonksiyonları bir blok kullanmalıdır.
  • Tüm uygulama üye işlevleri (protected VE private) asma kilit kullanmamalıdır.
  • Arayüz üye işlevleri yalnızca çağrı protected VEYA private Üye işlevi etkin, ancak genel üye işlevi yok.
denetimli süspansiyon

Korumalı askıya almanın temel varyantı, bir bloğu ve karşılanması gereken bir önkoşulu birleştirir. Ön koşul karşılanmazsa, çağıran iş parçacığı uyku moduna geçer. Kontrol iş parçacığı, bir veri yarışına veya kilitlenmeye yol açabilecek bir yarış durumundan kaçınmak için bir kilit kullanır.

Birkaç varyant vardır:

  • Bekleyen iş parçacığı, durum değişikliği konusunda pasif olarak bilgilendirilebilir veya durum değişikliği için aktif olarak sorgulanabilir.
  • Bekleme, süre sınırlaması olan veya olmayan olabilir.
  • Bildirim, bekleyen bir diziye veya tüm dizilere gönderilebilir.
Eşzamanlı mimari


Etkin nesne ve izleme nesnesi, üye işlevlerin çağrılmasını senkronize eder ve koordine eder. Ana fark, aktif nesnenin üye işlevini farklı bir iş parçacığında yürütmesi, izleme nesnesinin ise istemci ile aynı iş parçacığında olmasıdır.

aktif nesne

Aktif nesne tasarım modeli, her biri kendi kontrol iş parçacığında bulunan nesneler için yöntem çalıştırmayı yöntem çağrısından ayırır. Amaç, eşzamansız yöntem çağırma ve istekleri işlemek için bir zamanlayıcı kullanarak eşzamanlılığı tanıtmaktır.. (Wikipedia: aktif nesne)

nesneyi izle

İzleme nesnesi tasarım modeli, aynı anda bir nesne içinde yalnızca bir üye işlevin yürütülmesini sağlamak için eşzamanlı üye işlev yürütmesini senkronize eder. Ayrıca, nesnenin üye işlevlerinin yürütme dizilerini işbirliği içinde programlamasına olanak tanır. (Model Yönelimli Yazılım Mimarisi: Eşzamanlı ve Ağa Bağlı Nesne Modelleri)

Sıradaki ne?


Bir sonraki makalemde senkronizasyon modeline bakacağım ve özellikle veri paylaşımını ele alan eşzamanlılık modelleri hakkında yazacağım.


(rm)



Haberin Sonu
 
Üst