समानांतर कार्यक्रमों में त्रुटियों को संभालने का सबसे अच्छा तरीका क्या होगा?


11

समानांतर एल्गोरिदम दरवाजे पर दस्तक देने के साथ, त्रुटि से निपटने के बारे में सोचने का एक अच्छा समय हो सकता है।

इसलिए पहले तो त्रुटि कोड थे। वो चूसे। यह उन्हें अनदेखा करने के लिए स्वतंत्र था, इसलिए आप देर से विफल हो सकते हैं और हार्ड-टू-डीबग कोड का उत्पादन कर सकते हैं।

फिर अपवाद आए। एक बार होने के बाद उन्हें अनदेखा करना असंभव हो गया था, और ज्यादातर लोग (जोएल को छोड़कर) उन्हें बेहतर पसंद करते थे।

और अब हमें पुस्तकालय मिले जो समानांतर कोड की मदद करते हैं। समस्या यह है कि, आप समानांतर कोड में अपवादों को आसानी से नहीं संभाल सकते हैं क्योंकि आप गैर-समानांतर कोड के साथ आसानी से कर सकते हैं। यदि आप अतुल्यकालिक रूप से एक कार्य का शुभारंभ करते हैं और यह एक अपवाद फेंकता है, तो इसे खोलने के लिए कोई स्टैक ट्रेस नहीं है; सबसे अच्छा आप इसे पकड़ सकते हैं और इसे कार्य ऑब्जेक्ट पर पंजीकृत कर सकते हैं, अगर ऐसी कोई वस्तु है। हालांकि, यह अपवादों की प्राथमिक शक्ति को पराजित करता है: आपको उनके लिए जांच करनी होगी और आप उन्हें बिना किसी अतिरिक्त प्रयास के अनदेखा कर सकते हैं , जबकि एकल-थ्रेडेड कोड में एक अपवाद आवश्यक रूप से उपयुक्त कार्यों को ट्रिगर करेगा (भले ही इसका मतलब आपके कार्यक्रम को समाप्त करना हो)।

भाषा के कार्यान्वयन या पुस्तकालयों को समानांतर कोड में त्रुटियों का समर्थन कैसे करना चाहिए?


2
यह stackoverflow से संबंधित नहीं होना चाहिए ?
ग्रेविटन

@ जल्द ही हुई यह व्यक्तिपरक है और यह उन विशेषताओं के बारे में है जो आवश्यक रूप से मौजूद नहीं हैं, इसलिए मुझे लगता है कि यह यहाँ है।
ज़ीनक

लेकिन यह प्रोग्रामिंग के बारे में है, न कि प्रोग्रामर। :)
bzlm

1
@bzlm FAQ "प्रोग्रामर - स्टैक एक्सचेंज विशेषज्ञ प्रोग्रामर के लिए है जो सॉफ्टवेयर विकास पर व्यक्तिपरक चर्चा में रुचि रखते हैं।" और एसओ स्पष्ट रूप से व्यक्तिपरक चर्चाओं को हतोत्साहित करता है।
zneak 19

जवाबों:


2

मैं बल्कि उन त्रुटियों के लिए कॉलबैक के शौकीन हूं जिन्हें संभाला जा सकता है। और वे काम किया जा सकता है बस अतुल्यकालिक रूप से ठीक ...

लेकिन उन त्रुटियों के लिए , जिन्हें वास्तव में असाधारण त्रुटियों से निपटने में सक्षम नहीं किया जा सकता है , मैं इसके बजाय प्रासंगिक जानकारी को सहेजना और कार्यक्रम को समाप्त करना चाहता हूं। चूंकि यह आमतौर पर किसी भी तरह की वैश्विक त्रुटि-हैंडलर के माध्यम से पूरा किया जाता है, इसलिए मुझे अपवादों को किसी ऐसी चीज में बदलने की आवश्यकता नहीं है जो इसके लिए काम करता है - लेकिन महत्वपूर्ण त्रुटियों का पता लगाने और मेमोरी डंप का उत्पादन करने के लिए बेहतर मंच समर्थन, आदि अच्छा होगा।


मैं दूसरी कॉलबैक। ऊपर विचार मेरे लिए बहुत सही लगता है।
पैक्स नॉटिस

-2

लगता है कि आप यह सुनिश्चित करना चाहेंगे कि यह कार्य स्वयं अपवाद है, और फिर कुछ ऐसा लौटाया जिससे कॉलिंग प्रोग्राम को पता चल सके कि धागा बंद होने की आवश्यकता है। तब सभी थ्रेड्स के परिणाम को संसाधित करने के लिए तर्क होगा, यह जानते हुए कि उन थ्रेड्स में से कुछ विफल हो गए थे।


5
"कुछ लौट रहा है" - किसको? कॉल करने वाला पहले ही स्थानांतरित हो गया है।
मार्क एच।

जैसा कि @sparkie ने कहा, आप ऐसा नहीं कर सकते। यहां तक ​​कि अगर आप कॉल स्टैक को कोरटाइन के लिए एक रूट के रूप में रखते हैं, तो कॉल करने वाला शायद दूर, बहुत दूर होगा। मैं उल्लेख किया है, अपवाद तो वे अपने को रोकने के डिजाइन किए गए थे कार्यक्रम , अब । इसके लिए स्वयं जाँच करना बाद में इसे पूरी तरह से हरा देता है क्योंकि अपवादों पर किसी का ध्यान नहीं जा सकता।
zneak

@Zneak, मुझे लगता है कि जब मैंने अपवादों का उल्लेख किया था तो मैं आपकी (मानक) परिभाषा का उपयोग नहीं कर रहा था, मेरा मतलब था कि त्रुटि पकड़ी गई थी। किसी भी कार्य के समाप्त होने के बाद उसे कहीं पर लौटना पड़ता है, उस बिंदु पर "अपवाद" / त्रुटि (उस स्तर पर) से निपटा जा सकता है। मुझे यकीन नहीं है कि आप लोग कॉलिंग प्रोग्राम के दूर होने का उल्लेख कर रहे हैं, फ़ंक्शन से किसी भी रिटर्न वैल्यू को किसी के साथ निपटाया जाना है। मुझे एहसास है कि यह लगभग साथ ही काम नहीं करेगा अगर धागे के परिणाम एक दूसरे के साथ निर्भरता से मेष करते हैं।

1
सभी समानांतर कार्य कहीं "वापसी" नहीं करते हैं। उदाहरण के लिए, आप मुख्य कार्य पर कुछ और करते हुए एक लंबे कार्य को केवल एक अलग थ्रेड में सौंप सकते हैं, (गलत तरीके से) कभी भी बिना सोचे समझे कि यह सही ढंग से पूरा हुआ है। उदाहरण के लिए, मैं एक इमेज एडिशन सॉफ्टवेयर लिख सकता हूं, जो सेकेंडरी थ्रेड की फाइलों को लिखता है, और टास्क शुरू होते ही सेव डायलॉग से लौट आता है। मुझे वापसी मूल्य की आवश्यकता नहीं होगी, जो भी हो, किसी भी अन्य ऑपरेशन के लिए, इसलिए त्रुटियों को छोड़कर, इसकी जांच करने का कोई कारण नहीं है।
19
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.