इस बारे में एक समान सवाल पूछा गया था लेकिन यह बिल्कुल उसी शर्तों में नहीं पूछा गया था।एरलांग 'पकड़' अभिव्यक्ति बनाम दक्षता के मामले में कोशिश/पकड़
मैं बेस 64 बाइनरी को सुरक्षित रूप से डीकोड करने की कोशिश कर रहा हूं, एक संदर्भ में जहां यह संभव है कि इनपुट बाइनरी या बेस 64 एन्कोडेड न हो।
एरलांग कहते हैं कि इसे दुर्घटनाग्रस्त होने दें और इसे संभालें - अगर मैं ऐसा करना चाहता हूं, तो सबसे प्रभावी तरीका क्या है। इस प्रणाली में दक्षता काफी महत्वपूर्ण है।
मुझे कोशिश/पकड़ने से बचने के लिए पता है, क्योंकि यह एक पूर्ण स्टैक ट्रेस बनाता है - हालांकि, इस संदर्भ के लिए कैच कीवर्ड उचित है? और पकड़ कीवर्ड तेजी से/अधिक कुशल है?
एक समारोह में इस तरह के रूप में
safe_decode(Binary) ->
case catch base64:decode(Binary) of
<<Result/binary>> -> {ok, Result};
{'EXIT', _} -> {not_base64, Binary}
end.
इस सही मायने में अधिक एक कोशिश पकड़ से कुशल है? इस परिदृश्य को उस प्रणाली में कैसे संभालना सबसे अच्छा है जहां दक्षता महत्वपूर्ण है यानी दुर्घटनाएं जिसमें एक स्टैक ट्रेस बनाने और/या खुश पथ की तुलना में अधिक प्रसंस्करण की आवश्यकता होती है, जितनी संभव हो सके कुशलतापूर्वक संभालने की आवश्यकता होती है।
मैं सिर्फ एरलांग सीख रहा हूं, तो शायद जवाब मुझे चेहरे पर देख रहा है।
बहुत दिलचस्प - धन्यवाद! –
आप एक दर्दनाक रूप से दुर्घटनाग्रस्त प्रक्रिया को 'spawn_monitor' भी करना चाहेंगे जो आपको किसी भी' try..catch' पागलपन को प्रोत्साहित किए बिना सीधे विफलता पर एक सफलता या मृत्यु नोट (मॉनीटर) का संदेश भेज देगा। * कभी-कभी * यह आदर्श समाधान है। कभी नहीं। हमेशा के रूप में, बेंचमार्क। यदि आप खराब इनपुट डेटा के * बहुत * को पकड़ रहे हैं तो क्रैश हल्का भार हो सकता है। यदि आपका 99% इनपुट डेटा अच्छा है, तो 'try..catch' शायद बेहतर है। – zxq9