Paralel programlardaki hataları ele almanın en iyi yolu nedir?


11

Paralel algoritmalar kapıyı çaldığında, hata işlemeyi düşünmek için iyi bir zaman olabilir.

İlk başta hata kodları vardı. Emilenler. Onları görmezden gelmek serbestti, bu yüzden geç başarısız olabilir ve hata ayıklaması zor kod üretebilirsiniz.

Sonra istisnalar geldi. Bunlar meydana geldiklerinde görmezden gelinmeleri imkansız hale getirildi ve çoğu kişi (Joel hariç) onlardan daha çok hoşlanıyor.

Ve şimdi paralel koda yardım eden kütüphanelerimiz var. Sorun şu ki, paralel koddaki istisnaları paralel olmayan kodla olabildiğince kolay işleyemezsiniz. Bir görevi zaman uyumsuz olarak başlatırsanız ve bu bir istisna atarsa, gevşemesi için geçmişte yığın izleri yoktur; yapabileceğiniz en iyi şey onu yakalamak ve böyle bir nesne varsa görev nesnesine kaydetmektir. Bununla birlikte, istisnaların birincil gücünü yener: bunları kontrol etmelisiniz ve herhangi bir ek çaba harcamadan onları görmezden gelebilirsiniz , oysa tek iş parçacıklı kodda bir istisna uygun eylemleri tetikleyecektir (programınızı sonlandırmak anlamına gelse bile).

Dil uygulamaları veya kütüphaneler paralel koddaki hataları nasıl desteklemelidir?


2
Buna ait olmamalı StackOverflow'daki ?
Graviton

@Ngu Yakında Hui Bu öznel ve zorunlu olarak var olmayan özellikler hakkında, bu yüzden buraya ait olduğunu düşünüyorum.
zneak

Ama bu programcılarla değil programlama ile ilgilidir. :)
bzlm

1
@bzlm SSS "Programcılar - Stack Exchange, yazılım geliştirme üzerine öznel tartışmalarla ilgilenen uzman programcılar içindir." ve SO sübjektif tartışmaları açıkça caydırıyor.
zneak

Yanıtlar:


2

Ben hatalar için geri aramaları oldukça düşkünüm olabilir işlenebilir. Ve asenkron olarak iyi çalışabilirler ...

Ancak ele alınamayan hatalar , gerçekten istisnai hatalar için, ilgili bilgilerin kaydedilmesini ve programın sonlandırılmasını tercih ederim. Bu genellikle yine de bir çeşit küresel hata işleyici aracılığıyla gerçekleştirildiğinden, bunun için işe yarayan bir şeye istisnaları bükmeye gerek görmüyorum - ancak kritik hataları tespit etmek ve bellek dökümü, vb.İçin daha iyi platform desteği iyi olurdu.


İkinci geri aramalar. Yukarıdaki fikir benim için oldukça mükemmel görünüyor.
Pax Noctis

-2

Görevin kendi istisnalarını ele aldığından emin olmak ve arama programının iş parçacığının kapatılması gerektiğini bilmesini sağlayan bir şey döndürmek istediğiniz gibi görünüyor. Daha sonra, bu evrelerin bazılarının başarısız olduğunu bilerek, tüm evrelerin sonucunu işlemek mantığı olur.


5
"bir şey iade" - kime? Arayan zaten devam etti.
Mark H

@Sparkie'nin dediği gibi, bunu yapamazsınız. Çağrı yığınını eşgüdüm için bir kök olarak tutsanız bile, arayan muhtemelen çok uzak olacaktır. Ben de belirtildiği gibi onlar durdurmak, böylece, istisnalar tasarlanmış bir program , artık . İstisnalar fark edilmeden geçebileceğinden, bunu daha sonra kendiniz kontrol etmek tamamen yener.
zneak

@Zneak, sanırım (standart) tanımınızı kullanmadığım istisnalardan bahsettiğimde, sadece hatanın yakalandığı anlamına geliyordum. Herhangi bir fonksiyon bittikten sonra bir yere geri dönmelidir, bu noktada "istisna" / hata (o seviyede) ele alınabilir. Neden arama programı uzakta olmaktan bahsettiğinizden emin değilim, işlevden herhangi bir dönüş değeri bir şekilde ele alınmalıdır. İş parçacıklarının sonuçları birbirine bağlıysa, neredeyse iyi çalışmadığını anlıyorum.

1
Tüm paralel görevler bir yere "geri dönmez". Örneğin, uzun bir görevi, ana iş parçasında başka bir şey yaparken (yanlış), doğru bir şekilde tamamlanıp tamamlanmadığını merak etmeden ayrı bir iş parçacığına atayabilirsiniz. Örneğin, ikincil bir iş parçacığındaki dosyalara yazan bir görüntü baskı yazılımı yazabilir ve görev başlar başlamaz kaydet iletişim kutusundan dönebilirim. Geri dönüş değerine ihtiyacım olmayacak, ne olursa olsun, daha fazla işlem için, bu yüzden hatalar dışında, kontrol etmek için bir neden yok.
zneak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.