Java™ Çatal-Katıl Fatih

The source-page: http://www.coopsoft.com/ar/ConquerArticle.html

Çok çekirdekli Java™ uygulamaları ile paralel işleme

Java™ ‘daki Çatal-katıl geliştirme bugün iki farklı şekilde geliyor:

1. Günlük, çok çekirdekli uygulamalar için iyi sonuç veren, utandırıcı bir şekilde Paralel Çatal-katıl tekniği
2. Paralel işleme için iş yükünü çoklu görevlere bölmek için bir Böl ve Conquer Çatal-Birleştirme tekniği

Bu makale, Fatih yöntemini (1700 kelime) açıklamaktadır.

Edward Harned (eh)
Kıdemli Geliştirici, Cooperative Software Systems
Kasım, 2010 [güncelleme tarihi Eylül 2019]

Çatal-Katılma Nedir?

Sonunda her yolun bir araya geldiği yoldaki bir çatal düşünün – katılır.

Çatal-Birleştirme, paralel işleme için bir uygulamayı birkaç parçaya böler ve sonunda birleştirir.

Şekil 1: Çatal-Birleştirme Yapısı

Fork-Join Structure

Diyelim ki bin numaradan oluşan bir dizimiz var. Bu numaraların her biri için bir prosedür yapmalı ve toplamı eklemeliyiz.

Liste 1: Dizi İşleme


 for (int i = 0; i < 1000; i++) {
total += doProcedure(array[i]);
}

Prosedürün tamamlanması bir saniye (duvar saati) alırsa, bu görevi tamamlamak için bin saniye (16½ dakikadan fazla) sürer.

Çatal-Katılabilir

  • büyük diziyi, her biri yüz elementten oluşan on diziye ayırın (çatal),
  • her bir diziyi ayrı bir CPU’da işler ve
  • bittiğinde sonuçları birleştir.

Bu, orijinal zamanın onda biri kadar bir yüz saniye sürer (sadece 1½ dakikadan fazla). CPU ne kadar uygunsa sonuç o kadar hızlı olur.

Bu soyutlama, Divide and Conquer’in standart bilimsel modeline çok benziyor.

Bölün-Çöz paralel algoritmalar için doğal bir örnektir. İki ya da daha fazla alt-sorunlarla ilgili bir sorun bölünmesi sonra yöntem paralel alt sorunları çözer. Tipik haliyle, alt sorunlar yinelemeli çözülür ve bu şekilde bir sonraki bölme aşaması paralel olarak çözmek için daha alt düzeyde sorun oluşur.

Şekil 2: Bölün-Çöz

Divide and Conquer

Yüksek performanslı bilgi işlem işleminin konusu budur – eşzamanlı olarak çok sayıda veriyi mümkün olduğu kadar CPU’da işlemek. Harita/küçültme, sıralama ve sayısız dizi işleme uygulamasının tümü sorunlarını çözmek için Böl ve-Kullan’ı kullanabilir.

Java™ ‘da Çatal-Birleştirme

Günümüzde dört adet işletme sınıfı Çatal-katıl çerçevesi bulunmaktadır:

1. TymeacSE/VE – Bu çoklu iş parçacığı üzerinde bağımsız yürütülmesi için bileşenlerine işi bölmek çerçeveler Çatal-Üyelik Utanç verici-Paralel bulunmaktadır.

4. TymeacDSE – Bu Böl-Çöz çerçeve dinamik çoklu iş parçacığı üzerinde yürütülmesi için aynı görevi içine çalışmalarını parçalanır ki (bazen “dağınık toplamak” olarak adlandırılır) Çatal-katılın.

Fatih bu makalenin konusudur. Proje nedeniyle Çatal eksik kalitesinin ortaya Çıktı/Üyelik bilimsel paketi Java™ 7 tanıtıldı.

Fatih Özellikleri

Nasıl çalışır

Bir istemci sunucuyu bir istekle çağırır:

  • Bu prosedürü yürütme (Kullanıcı Sınıf adı)
  • Bu isteğe bağlı giriş nesnesi kullanma
  • Senkron istekler için
    • Bu aralık en fazla tamamlanması için bekle
    • Kullanıcı Sınıfı gelen çağrının durumunu ve isteğe bağlı Nesne döndürme
  • Asenkron istekler için
    • çağrının durumu ile hemen dönen (başarıyla planlandı)
Kullanım kolaylığı

Sunucunun kendisi – hem gömülü modda yürütmek hem de RMI (standart/etkinleştirilebilir, IIOP vb.), Günlük kaydı, istatistik toplama, hata algılama/kurtarma ve profesyonel, kurumsal sınıf bir sunucunun diğer birçok yönünü kullanmak için çeşitli seçeneklere sahiptir. Profesyonel dokümantasyon (80 sayfalık html stil el kitabı) öğrenme eğrisini kolaylaştırır.

İşi yapan kullanıcı sınıfı – basittir. Bir DBMS’de saklı bir prosedür gibi düşünün. Ya şimdi iş yapıyorsunuz ya da yeni görevler yapıyorsunuz.

Kullanıcı sınıfını çalıştırmak için sunucuyu çağıran istemci – basit ve basittir. Bir yanıt bekleyin (zaman uyumlu istek) veya beklemeyin (zaman uyumsuz istek.)

Bağımsızlık

Sunucu çağıran istemci ve kullanıcı sınıfından tamamen ayrıdır. Sunucu herhangi Sınıf içinde veya uzaktan Nesne olarak gömülü bir varlık olarak işlevine yapabiliyor (RMI).

Kullanıcı sınıfı sunucu sınıfı yoluna lokal olarak bulunabilir veya bir URL Sınıf Yükleyici tarafından erişilebilir.

Çağıran istemci kullanıcı sınıfı içinde de dahil olmak üzere, herhangi bir yerde bulunabilir (özyineleme kullanırken.)

Kod bağımsızlık tasarımı, geliştirme ve hata ayıklama basitliğini anlamına gelir; Burada spagetti kod no.

Tasarım yapısı/iş çalma vs. iş paylaşımı

Çalışma hırsızı Az kullanılan mal sahipleri inisiyatif alır; diğer işlemcilerden iş çalma eğilimindedirler.

Görevler eklenir ve işçi iş parçacıkları bir alt tablonun tabanından Görevler alır (çift uçlu sıra.) İşçi iş parçacıkları kendi başlarına hiçbir iş yapmazsa, Görevler başka bir iş parçacığının başının üst kısmından Görevler alır. Bir Görevler, çalışmayı alt görevlendirmeye ihtiyaç duyduğunda, tüm yeni Görevleri geldikleri aynı eke yerleştirir.

Bu tasarım önbellek hatalarını ve iş parçacığı çekişmelerini sınırlayabilir, çünkü iş parçacıklarını çalmak yalnızca deque’in tepesinden gelir. En azından olması gerektiği gibi. Çalışma hırsızı, işletim sistemlerinde ve kapalı ortamlarda güzel çalışır (Tıklayın.) Ancak varsayımlar Java™ ‘da çok az ağırlık taşır.

Java™ uygulamaları sanal bir makine altında çalışır. Bazen iki sanal makinenin altında (ana bilgisayarlar VM altında Linux çalıştırır ve Linux JVM’yi çalıştırır.) Bu nedenle, Java™ uygulamaları herhangi bir önbellek hakkında herhangi bir varsayımda bulunamaz.

Tüm yeni Görevler aynı füzeye girdiğinden, iş çalma iş parçacıkları, Görevlerin bu fıkraların tepesinden getirilmesinde birbirleriyle çatışma potansiyeli taşır. Resim 32 adet konu/deque ve 8 adet müşteri talebi. 8 talep için tüm görevler yalnızca 8 deque’lere gidiyor. Şimdi 8 adet başlık Görevler’i kendi çekincelerinden alırken, diğer 24 başlık iş için birbirleriyle savaşmak zorunda kalıyor.

İş Çalan İplikler periyodik olarak uyanmalı ve iş aramalı. Java™ ‘daki zamanlama ile donanımdaki zamanlama arasında zayıf bir ilişki vardır. Java™ ‘da bir n-nanosaniye uyku her zaman altta yatan sisteme doğru şekilde çevrilmiyor. İş parçacığı sonunda çalışana kadar görevler işlenmeden bekleyebilir.

İş paylaşımı Zamanlayıcı, çalışmayı az kullanılan işlemcilere dağıtma umuduyla mülkün sahipleri arasındaki işi yaymaya çalışır

Fatih, önce İş Paylaşma’yı kullanır. Ya da daha doğrusu, dağılma toplayın. Zamanlayıcı, her Görevi bulduğu ilk boş FIFO sırasının altına yerleştirir; konuları üstten al Tüm sıralar işe yaradığında, zamanlayıcı görev yerleşimini sistem boyunca eşit olarak dengeler. Fatih, iş aramak için periyodik olarak uyanan konulara bağlı değildir, programcı sıraya bir Görev eklerken her bir ipliği fiziksel olarak uyandırır. Fatih için, uygulama Görevler ortaya çıktığında, hepsi güvertededir – dinlenmeniz için size para vermeyiz – her iş parçacığı işin mümkün olduğunca çabuk bitmesine yardımcı olur.

Bir sıra boşaldığında, sahibi iş parçacığı diğer sıralarda iş aramaya gider, iş çalınır. Kuyruklar dengeli bir yük içerdiğinden, çekişme potansiyeli hafiftir. Ayrıca, meraklı bir iş parçacığının kuyruğunun birdenbire çalışması varsa, iş parçacığı susturmasını durdurur ve hemen kendi sırasına geri döner.

Maksimum verim. Azami hız. Maksimum verim.

Ölçekleme

Çok büyük işlemci ortamlarında (yüz/binlerce CPU/çekirdek), Conqueror, Görevlerin zamanlanmasını ve alınmasını hızlandırmak için iş parçacığı/kuyrukları üzerinde segmentasyon veya dizinler kullanma yeteneği sağlar. Bu, gerçekten paralel uygulamalar için kritik olan ölçeklenebilirlik özelliğidir.

Kullanıcı Sınıfı Kısıtlamaları

Yok.

Dış kaynaklara (DBMS, Queuing sistemleri vb.) Erişimi kuvvetle kısıtlayan ve görevler arası iletişime izin veremeyen (uçucu alanlar) diğer bazı yazılımların aksine, Conqueror’da güçlü hata ve durak algılama özelliği vardır, bu nedenle herhangi bir algoritma iyi bir algoritmadır.

Hata algılama/kurtarma, Durak algılama/kurtarma

Kullanıcı Sınıfı istisnaları konuları yeniden başlatır, hataları konuları devre dışı bırakır. Fatih, istisnayı ayrıntılı bir mesajda yazdırır/günlüğe kaydeder ve sorunun yöneticisine bildirir. Sunucuyu yıkmadan yürütme sırasında Kullanıcı Sınıfları yeniden yüklenebilir. Bir başarısızlıktan sonra Fatih, önceden planlanmış herhangi bir Görevi geri almaya çalışır. Talep bir başarısızlık olduğu için, devam eden veya devam etmeden önce çalışmayı durdurma, işlerinizi devam ettirmek için serbest bırakır.

Fatih kere yedi bir dişin hayatında olaylar. Bu şekilde çalışma bir yönlü ya da bekleme sonsuza problem Monitör cini ile fark edilebilir. Zaman uyumsuz bir istek ihtiyatlı bir zaman limiti aştığında, Fatih bir “muhtemelen durmuş” listesi ve bildirimlerin bir yönetici için bir giriş ekler. Liste yöneticileri tarafından görüntülenebilir ve değiştirilebilir olduğunu. Gerçekten silinir ve yeni bir kopya ile değiştirilebilir (Kullanıcı Sınıfı asla özgür olacak bir kaynağı beklediğini) konuları kaybetti.

İstatistik toplama/depo

Fatih, iş parçacıkları, sıralar, duraklatılmış istekler ve Kullanıcı Sınıfları için ayrıntılı kullanım istatistiklerini tutar. Fatih, hem talep üzerine hem de kapanma sırasında bir depoya yazmayı sağlar.

Güvenlik

SSL güvenliği, Fatih’e baştan beri dahil edildi. Yerel Arabirimi kullanmaya gerek yoktu ve özellikle yönetilen tüm çalışma zamanı güvenlik garantilerini ve güvenlik özelliklerini atlamak için Güvensiz Sınıfı kullanmaya gerek yoktu. Fatih, uygulama geliştiricileri tarafından, diğer uygulama geliştiricileriyle birlikte% 100 saf bir uygulama olarak inşa edildi.

Akort

100% saf aynı zamanda 100% ayarlanabilir anlamına gelir. Uygulama her JVM’de aynı şekilde çalışır. VM’ye (Güvensiz Sınıf) kanca takılmadığı için, diğer işletim sistemlerine ve VM sağlayıcılarına taşınırken sürpriz olmaz. Aynı çalışır, sadece daha hızlı veya daha yavaş.

Fatih, iş parçacığı performansını analiz etmek için faydalı yedi istatistik, sıra performansını analiz etmek için dört istatistik ve isteğe bağlı endekslerin performansını analiz etmek için faydalı dört istatistik sunar. (Ve doğal olarak, ayarlama ile ilgili kullanım kılavuzundaki bir bölüm.)

Yönetim

Kimse ne yaptığını bilmiyorsa, pek iyi değil. Ve ne yaptığını biliyorsanız, kesinlikle değiştirmek isteyeceksiniz.

Fatih, çalıştırma sunucusunu görüntülemek ve değiştirmek için on dört GUI (ve GUI dışı erişim) ve kurulum ve operasyonel değişkenleri yönetmek için üç GUI ile birlikte gelir.

Şekil 3: Menü

Fatih sürekli değişen bir ortama dinamik bir cevap sağlar.

Yerleşik İşlevler

Geliştiriciler için yirmi dört Tymeac Sunucu Yerleşik İşlev vardır:

  1. Çeşit
  2. Birleştirme (birleştirme birçok diziler sıralı)
  3. Toplam
  4. Çarpma işlemi
  5. Birleştirin (birden sıralanmamış diziler birleştirmek ve isteğe sıralama sonucu)
  6. Harita indirgeme
  7. Filtre
  8. Bölme (Filtre bu getiriler, süzüldü ve BM-süzüldü dizileri)
  9. Tarama (Paralel Önek Sum)
  10. Arama (sırasız dizilerde üzerine Sıralı Arama Paralel)
  11. Rastgele (Paralel Rastgele Sayı Üretme)
  12. Değerlendirmek (ParallelTry)
  13. Çağırır (Invoke paralel)
  14. Dizi Nesil (ParallelArray)
  15. Vektör çarpım
  16. Bir skalerle Vektör bölme
  17. Vektör ilavesi
  18. Vektör çıkarma
  19. Matris çarpımı
  20. Bir skalerle Matris bölünme
  21. Matris ilavesi
  22. Matris çıkarma
  23. Matris sıralama
  24. Matris arama (sıralanmamış matrisi üzerinde sıralı arama paralel)

Sonuç

Yoğun bilgi işlem gerektiren uygulamaları geliştirmek için bir Çatal-katıl çerçevesini kullanmak hiç akıllıca değil.

Neyse ki, bugün Java™ SE’de bulunan çok çekirdekli uygulamalar için yukarıda belirtilen özellikleri destekleyen genel amaçlı bir Çatal-katıl çerçevesi vardır. Ve çerçeve bir RMI Sunucusu (standart/etkin) olarak çalışabildiğinden, Java™ EE uygulamaları için kullanılabilir.

Tymeac™ Java™ Standart Sürüm için Böl ve YönetSourceForge.net
bir Açık Kaynak Yazılım projesidir.
ve orada en son sürümü indirebilirsiniz.

Referanslar

Son indirin DSE sürümünü buradan Tymeac. Versiyon bu makalede açıklanan.

Son indirin GD sürümünü buradan Tymeac. Utanç verici paralel Java™ SE ortamı için ürün Çatal-katılın.

Son indirin VE sürümünü buradan Tymeac. Utanç verici paralel Android’in™ ortamı için ürün Çatal-katılın.

Neden Java™ 7 koleksiyonu olduğu bilimsel paket.

Cilk-Plus Sitesi – http://software.intel.com/en-us/articles/intel-cilk-plus/

Diğer Bu dizideki makaleleri Çatal-Katılım:

Bir Çatal-Üyelik modeli “utanç verici paralel” – Java SE Geliştirme Çatal-Üyelik

Verimlilik için bekleyin Listelerini Kullanma – Yüksek Performanslı Öncelik Kuyruğu Java SE

Java™ SE Konu Konteyner – Java SE konu Yönetme

Yazar hakkında

Edward Harned otuz yılı aşkın sektör tecrübesi olan bir yazılım geliştiricisi. O ilk büyük sanayi bir çalışan olarak projeler açtı ve sonra bağımsız bir danışman olarak çalıştı. Bugün, Ed kıdemli geliştiricisi Cooperative Software Systems son yirmi yıldır, o getirmeyi programlama Java™ kullandı, görevlerin geniş bir yelpazede çözümler çatal-katılırlar.

© 2010 – 2019  E.P. Harned  All rights reserved