Yazılım Geliştirme: Gemide Uygulamalar İçin Modeller
Modeller, modern yazılımın geliştirilmesinde ve yazılımın mimarisinde önemli bir soyutlamadır. Açıkça tanımlanmış terminoloji, temiz dokümantasyon ve öğrenme en iyisinden sunarlar. Yarışma alanında kanıtlanmış birçok model vardır. Paylaşım ve değişim gibi senkronizasyon problemleri, aynı zamanda aksesuar mimarilerle de ilgilenirler.
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.
Rekabetin temel sorunu yaygın ve değişen durumdur ya da Tony van Eerd'in “örneğin” bir CPPCCC 2014: “Anaokulunda öğrendiklerinizi unutun (yani paylaşmayı bırakıyorsunuz)“Rekabet için önemli bir terim veri yarışıdır:
Bir veritabanı için gerekli bir koşul ortak ve ortak bir durumdur. Usta veya mutasyon yapan herkes veri yarışmalarından kaçınır. Senkronizasyon modellerinin tam olarak konuşmasıdır. Buna ek olarak, aktif nesne ve monitör nesnesi gibi klasikler eşzamanlı mimari ile ilgilenir.
Senkronizasyon modeli
Senkronizasyon modelinin odak noktası parçaların ve değişimin yönetimidir.
Parçaları tedavi et
Paylaşmazlarsa, veri oluşturmak mümkün değildir. Yaygın kullanım, iş parçacığının yerel değişkenler üzerinde çalıştığı anlamına gelir. Bu, kopyalanan bir değerden (kopyalanmış değer), iş parçacığının belirli belleğinin kullanımı veya bir iş parçacığının sonucunun korunan bir veri kanalı aracılığıyla ilişkili geleceğe iletilmesinden elde edilebilir.
Kopyalanan değer
Bir iş parçacığı konularını kopyalayarak alırsa, referans olarak değil, verilere erişim senkronize edilmemelidir. Hayat süresi boyunca veri yarışmaları ve sorunları yoktur.
İplik için özel bellek
Belirli iş parçacığı veya iş parçacığı tesislerinin depolanması, birkaç iş parçacığının küresel bir erişim noktası kullanarak yerel belleği kullanmasını sağlar. Belleğe özgü kullanmak thread_local Bir değişken iş parçacığının yerel bir değişkeni haline gelirse. Bu, senkronizasyon olmadan iş parçacığının değişkenini kullanmanın mümkün olduğu anlamına gelir.
Futures
C ++ 11 üç varyantta vadeli işlemler ve ünlüler sunar: std::async, std:
ackaged_tasK ve çift std:
romise VE std::future. Gelecek, ilişkili sözün verdiği değer için yazılarak korunan bir yerleşimdir. Senkronizasyon açısından, bir çiftin bir vaat ve bir gelecekten belirleyici özelliği, korunan bir veri kanalının her ikisini de birbirine bağlamasıdır.
Yüz Değişimi
Verileri aynı anda yazmaz ve okumazsanız, veri yarışı mümkün değildir. Önce eleştirel bölümleri egzoz veya strateji olan kapsamlı bir blokla korumak önemlidir. Nesne odaklı tasarımda, kritik bölüm genellikle arayüzü dahil bir nesnedir. İplik güvenli arayüzü tüm nesneyi korur. Korunmuş süspansiyon modeli ile, çalışmasıyla yapıldığında değiştirici iş parçacığının sinyalleri.
Açıklanmamış blok
Genişletilmiş blok, kaynakların atanması fikri, bir Mutex'e uygulanan kaynakların başlatılması (kaynakların satın alınması başlatma, RAII). Bu dilin temel fikri, kaynakların edinilmesini ve serbest bırakılmasını bir nesnenin ömrünün süresi ile ilişkilendirmektir. Adından da anlaşılacağı gibi, “kapsamlı” nesnenin ömrü süresidir. Bu, C ++ teriminin nesnenin yok edilmesinden ve dolayısıyla kaynağın serbest bırakılmasından sorumlu olduğu anlamına gelir.
Stratejik kilitleme
Stratejik blok, kilit stratejisi modelinin uygulanmasıdır. Bu, kontrol stratejisinin bir nesnede kapsüllendiği ve sistemin bir bileşeni haline geldiği anlamına gelir.
Güvenli Arayüz Tartışması
Kritik bölümler nesneler olduğunda iş parçacığı güvenli arayüzü uygundur. En iyi durumda, bir kilitle üyelerin tüm işlevlerini koruma fikri bir performans sorununa ve en kötü durumda bir çıkmaza yol açar.
Her iki sorun da iş parçacığı güvenli arayüzü ile aşılır. İşte fikir:
Korunan süspansiyonun temel varyantı, bir blok ve tatmin olması gereken bir ön bir ön bir şekilde birleştirir. Önkoşul tatmin değilse, çağrı ipliği uyur. Kontrol iş parçacığı, bir veri yarışına veya çıkmaza yol açabilecek bir yarış koşulundan kaçınmak için bir blok kullanır.
Birkaç varyant var:
Etkin nesne ve monitör nesnesi, üyenin işlevlerine çağrıyı senkronize eder ve koordine eder. Temel fark, etkin nesnenin üye işlevini başka bir iş parçacığında gerçekleştirmesidir, monitör nesnesi istemci ile aynı iş parçacığında.
Aktif nesne
Aktif nesnelerin planlama modeli, her biri kendi kontrol iş parçacığında bulunan nesneler için yöntemin çağrılmasından yöntemin yürütülmesini yener. Amaç, eşzamansız yöntemin çağrılmasını ve taleplerin yönetimi için bir zamanlayıcı kullanarak rekabeti tanıtmaktır.. (Wikipedia: aktif nesne)
Nesneyi izleyin
Monitör tasarım modeli, bir seferde yalnızca üyenin işlevinin bir nesne içinde performans göstermesini sağlamak için rakip üyenin işlevinin yürütülmesini senkronize eder. Bu nedenle, nesnelerin üyelerinin işlevlerinin işbirliğinde yürütme dizilerini programlamasına izin verir. (Modeller -Odaklı Yazılım Mimarisi: Eşzamanlı ve Ağ Nesneleri için Desenler)
Sırada ne var?
Bir sonraki makalemde, senkronizasyon modeliyle ilgileneceğim ve özellikle veri paylaşımıyla karşılaşan yarışma modellerine yazacağı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!
Yazılım Geliştirme: Gemide Uygulamalar İçin Modeller
Modeller, modern yazılımın geliştirilmesinde ve yazılımın mimarisinde önemli bir soyutlamadır. Açıkça tanımlanmış terminoloji, temiz dokümantasyon ve öğrenme en iyisinden sunarlar. Yarışma alanında kanıtlanmış birçok model vardır. Paylaşım ve değişim gibi senkronizasyon problemleri, aynı zamanda aksesuar mimarilerle de ilgilenirler.

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.

Rekabetin temel sorunu yaygın ve değişen durumdur ya da Tony van Eerd'in “örneğin” bir CPPCCC 2014: “Anaokulunda öğrendiklerinizi unutun (yani paylaşmayı bırakıyorsunuz)“Rekabet için önemli bir terim veri yarışıdır:
- A Veri Yarışı En az iki iş parçacığı aynı anda ortak bir değişkene erişirse kullanılabilir. En az bir iş parçacığı değişkeni değiştirmeye çalışır. Bir programın veri yarışı varsa, tanımlanmamıştır. Bu, tüm sonuçların mümkün olduğu ve C ++ standardının artık garanti vermediği anlamına gelir.

Bir veritabanı için gerekli bir koşul ortak ve ortak bir durumdur. Usta veya mutasyon yapan herkes veri yarışmalarından kaçınır. Senkronizasyon modellerinin tam olarak konuşmasıdır. Buna ek olarak, aktif nesne ve monitör nesnesi gibi klasikler eşzamanlı mimari ile ilgilenir.
Senkronizasyon modeli
Senkronizasyon modelinin odak noktası parçaların ve değişimin yönetimidir.
Parçaları tedavi et
Paylaşmazlarsa, veri oluşturmak mümkün değildir. Yaygın kullanım, iş parçacığının yerel değişkenler üzerinde çalıştığı anlamına gelir. Bu, kopyalanan bir değerden (kopyalanmış değer), iş parçacığının belirli belleğinin kullanımı veya bir iş parçacığının sonucunun korunan bir veri kanalı aracılığıyla ilişkili geleceğe iletilmesinden elde edilebilir.
Kopyalanan değer
Bir iş parçacığı konularını kopyalayarak alırsa, referans olarak değil, verilere erişim senkronize edilmemelidir. Hayat süresi boyunca veri yarışmaları ve sorunları yoktur.
İplik için özel bellek
Belirli iş parçacığı veya iş parçacığı tesislerinin depolanması, birkaç iş parçacığının küresel bir erişim noktası kullanarak yerel belleği kullanmasını sağlar. Belleğe özgü kullanmak thread_local Bir değişken iş parçacığının yerel bir değişkeni haline gelirse. Bu, senkronizasyon olmadan iş parçacığının değişkenini kullanmanın mümkün olduğu anlamına gelir.
Futures
C ++ 11 üç varyantta vadeli işlemler ve ünlüler sunar: std::async, std:
Yüz Değişimi
Verileri aynı anda yazmaz ve okumazsanız, veri yarışı mümkün değildir. Önce eleştirel bölümleri egzoz veya strateji olan kapsamlı bir blokla korumak önemlidir. Nesne odaklı tasarımda, kritik bölüm genellikle arayüzü dahil bir nesnedir. İplik güvenli arayüzü tüm nesneyi korur. Korunmuş süspansiyon modeli ile, çalışmasıyla yapıldığında değiştirici iş parçacığının sinyalleri.
Açıklanmamış blok
Genişletilmiş blok, kaynakların atanması fikri, bir Mutex'e uygulanan kaynakların başlatılması (kaynakların satın alınması başlatma, RAII). Bu dilin temel fikri, kaynakların edinilmesini ve serbest bırakılmasını bir nesnenin ömrünün süresi ile ilişkilendirmektir. Adından da anlaşılacağı gibi, “kapsamlı” nesnenin ömrü süresidir. Bu, C ++ teriminin nesnenin yok edilmesinden ve dolayısıyla kaynağın serbest bırakılmasından sorumlu olduğu anlamına gelir.
Stratejik kilitleme
Stratejik blok, kilit stratejisi modelinin uygulanmasıdır. Bu, kontrol stratejisinin bir nesnede kapsüllendiği ve sistemin bir bileşeni haline geldiği anlamına gelir.
Güvenli Arayüz Tartışması
Kritik bölümler nesneler olduğunda iş parçacığı güvenli arayüzü uygundur. En iyi durumda, bir kilitle üyelerin tüm işlevlerini koruma fikri bir performans sorununa ve en kötü durumda bir çıkmaza yol açar.
Her iki sorun da iş parçacığı güvenli arayüzü ile aşılır. İşte fikir:
- Arayüz üyelerinin tüm (genel) işlevleri bir blok kullanmalıdır.
- Uygulama üyelerinin tüm işlevleri (protected VE private) bir blok kullanmamalıdır.
- Arayüz üyesinin işlevleri yalnızca protected VEYA private Üyenin işlevleri, ancak kamu üyesinin işlevi yok.
Korunan süspansiyonun temel varyantı, bir blok ve tatmin olması gereken bir ön bir ön bir şekilde birleştirir. Önkoşul tatmin değilse, çağrı ipliği uyur. Kontrol iş parçacığı, bir veri yarışına veya çıkmaza yol açabilecek bir yarış koşulundan kaçınmak için bir blok kullanır.
Birkaç varyant var:
- Bekleyen iş parçacığı pasif olarak devlet değişikliğini bilgilendirebilir veya aktif olarak devlet değişikliğini isteyebilir.
- Bekleme, zaman sınırı ile veya zaman sınırı olmadan gerçekleşebilir.
- Bildirim, bekleyen bir veya tüm iş parçacığına gönderilebilir.
Etkin nesne ve monitör nesnesi, üyenin işlevlerine çağrıyı senkronize eder ve koordine eder. Temel fark, etkin nesnenin üye işlevini başka bir iş parçacığında gerçekleştirmesidir, monitör nesnesi istemci ile aynı iş parçacığında.
Aktif nesne
Aktif nesnelerin planlama modeli, her biri kendi kontrol iş parçacığında bulunan nesneler için yöntemin çağrılmasından yöntemin yürütülmesini yener. Amaç, eşzamansız yöntemin çağrılmasını ve taleplerin yönetimi için bir zamanlayıcı kullanarak rekabeti tanıtmaktır.. (Wikipedia: aktif nesne)
Nesneyi izleyin
Monitör tasarım modeli, bir seferde yalnızca üyenin işlevinin bir nesne içinde performans göstermesini sağlamak için rakip üyenin işlevinin yürütülmesini senkronize eder. Bu nedenle, nesnelerin üyelerinin işlevlerinin işbirliğinde yürütme dizilerini programlamasına izin verir. (Modeller -Odaklı Yazılım Mimarisi: Eşzamanlı ve Ağ Nesneleri için Desenler)
Sırada ne var?
Bir sonraki makalemde, senkronizasyon modeliyle ilgileneceğim ve özellikle veri paylaşımıyla karşılaşan yarışma modellerine yazacağı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!